2011-03-21 18 views
7

में मेरे पास दो डेटा नहीं हैं, और मैं एक तालिका से सभी रिकॉर्ड्स का चयन करना चाहता हूं जो अन्य तालिका में मौजूद नहीं हैं, साथ ही संबंधित तालिका पर कुछ अन्य मानदंड भी निम्नानुसार हैं (123 बस है समझाने के उद्देश्य से) के लिए:ज़ेंड

TABLE A 
    ID 
    SOMETHING 

TABLE B 
    TABLE_A_ID 
    TABLE_C_ID 
    SOMETHING 

मेरे क्वेरी, डेटा के खिलाफ सीधे चलाने के लिए, के रूप में

SELECT A.SOMETHING 
    FROM A 
    WHERE A.ID NOT IN (
     SELECT 
      B.TABLE_A_ID AS ID 
      FROM B 
      WHERE TABLE_C_ID = 123 
    ); 

इस प्रकार मैं Zend में इस चला सकते हैं कैसे हो सकता है?

उत्तर

17

आप $db->query() का उपयोग कर सीधे एसक्यूएल चला सकते हैं; तुम्हारा बस होगा:

$results = $db->query("SELECT A.SOMETHING 
FROM A 
WHERE A.ID NOT IN (
    SELECT 
     B.TABLE_A_ID AS ID 
     FROM B 
     WHERE TABLE_C_ID = ? 
)", $id); 

संपादित: उत्तर देने के लिए इस ऑब्जेक्ट नोटेशन के साथ किया जा सकता है या नहीं, हाँ:

$sub_select = $zdb->select() 
        ->from("b", array("table_a_id AS id")) 
        ->where("table_c_id = ?", 'a'); 
$select = $zdb->select() 
       ->from("a", array("something")) 
       ->where("id NOT IN ?", $sub_select); 
print $select->__toString(); 

देता

SELECT `a`.`something` FROM `a` 
WHERE (id NOT IN 
    (SELECT `b`.`table_a_id` AS `id` FROM `b` WHERE (table_c_id = 'a'))) 
+0

वहाँ ऐसा करने के लिए एक रास्ता है यह Zend_Db_Table :: SELECT_WITH_FROM_PART के साथ है? – Elie

+0

धन्यवाद! ठीक वही जो मेरे द्वारा खोजा जा रहा था। – Elie