2009-11-11 13 views
5

मेरे पास कुछ एसक्यूएल है जो मैं ज़ेंडएफडब्ल्यू के साथ उपयोग करना चाहता हूं, लेकिन मैं इसे काम नहीं कर सकता और यह मुझे पागल कर रहा है। मुझे इस क्वेरी के साथ सही परिणाम मिलता है:Zend_Db_Table सबक्वायरी

SELECT DISTINCT e.festival_id FROM entries AS e, mail_log as m 
WHERE e.status = 1 
AND e.festival_id 
NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id) 

सहायता की सराहना की जाएगी। चीयर्स :)

उत्तर

6

मुझे यकीन नहीं है कि Zend_Db_Table सबक्वायरी को संभालने में सक्षम है।

आपको Zend_Db_Table का उपयोग करने की आवश्यकता क्यों है?

आप Zend_Db :: क्वेरी() का उपयोग कर सीधे क्वेरी निष्पादित कर सकते हैं।

$db = Zend_Db_Table::getDefaultAdapter(); 
$db->query("SELECT DISTINCT e.festival_id FROM entries AS e, mail_log as m 
    WHERE e.status = 1 
    AND e.festival_id 
    NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id) 
"); 
+0

यह एक लाने के पैरामीटर में subqueires संभाल कर सकते हैं:

$subselect = $db->select() ->from(array('u1' => 'users'), 'departmentId') ->joinInner(array('d' => 'demand'), 'u1.userId = d.adminId', null) ->where('d.demandId = ?', $demand->getId()); $select2 = $db->select() ->from(array('u' => 'users')) ->where('u.departmentId = ?', $subselect); 

परिणाम यह था। लेकिन डीबी एडाप्टर का उपयोग करने के लिए वह क्या करने की कोशिश कर रहा है, वह सही दृष्टिकोण है। – smack0007

11

गोरान का उत्तर सबसे अच्छा जवाब है।

$sql = $table->select() 
      ->setIntegrityCheck(false) 
      ->from('entries', new Zend_Db_Expr('DISTINCT festival')) 
      ->where('status = ?', 1) 
      ->where('festival_id NOT IN (?)',new Zend_Db_Expr("SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id")); 
0

मैं भी कोशिश आप sql.This मेरी कोड है: लेकिन अगर आप एक zend_db_table शैली क्वेरी चाहते हैं, यह एक विकल्प होगा।

$select = $db->select() 
     ->from(array('e' => ' entries'), array('festival_id')) 
     ->distinct(true) 
     ->where('e.status =?', 1) 
     ->where('e.festival_id NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id)') 
     ->setIntegrityCheck(false); 

मुझे लगता है कि यह कोड दूसरों की तुलना में अधिक पठनीय और सरल है।

4

मेरे मामले में, यह काम करता है:

SELECT `u`.* FROM `users` AS `u` WHERE u.departmentId = (SELECT `u1`.`departmentId` FROM `users` AS `u1` INNER JOIN `demand` AS `d` ON u1.userId = d.adminId WHERE d.demandId = '1') 
संबंधित मुद्दे