2009-12-16 66 views
2

我有我的DB 2個表...查找條件,如 'NOT EXISTS'

Entita
ID INT(11)
descrizione VARCHAR(50)
... ..

Publicobjects
....
模型 VARCHAR(50)模型,我需要(在這種情況下 'Entita'
MODEL_ID INT(11)

我想作這樣的查詢:
select entita.* from entita where NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)

如何在不使用自定義查詢的情況下使用CakePHP的模型函數執行此操作?

感謝

+0

我不認爲'WHERE NOT EXISTS'是一個有效的(My)SQL表達式,我無法真正想象如何選擇不存在的記錄。你能用文字描述你想得到什麼嗎? – deceze 2009-12-17 01:12:28

+0

是的,是一個有效的MySql表達式...看到這裏:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html :) – 2009-12-17 17:06:56

+0

哎呀,學到了東西新。 :)我從來沒有使用它,有趣的是,它甚至沒有出來時,在MySQL文檔中搜索它。 – deceze 2009-12-18 03:11:05

回答

2

我相信你試圖找到從Entita表不在Publicobjects錶行。假設這是正確的,這裏是MySQL查詢它的SQL查詢:

SELECT `entita`.* 
FROM `entita` 
LEFT JOIN `publicobjects` ON (`publicobjects`.`model` = 'entita' 
    AND `publicobjects`.`model_id` = `entita`.`id`) 
WHERE `publicobjects`.`model_id` IS NULL 

要使CakePHP的模型工作需要幾個步驟。我對你的型號名稱做了一些假設,但我可能是錯的,而且這些很容易修復。

首先添加此到Entita型號:

<?php 
var $hasOne = array('Publicobject' => array(
    'foreignKey' => 'model_id', 
    'conditions' => 'Publicobject.model = "Entita"')); 

現在,您可以檢查是否有遺漏的Publicobjects表這樣的條目:

<?php 
$this->Entita->find('all', array('conditions' => array('Publicobject.model_id IS NULL'))); 
+0

我忘記考慮左加入我的查詢...我用不存在,是相同的... :)謝謝! 但是,如果我只想選擇'Entita'也是'Publicobject'我必須改變條件:'Publicobject.model_id IS NOT NULL'... :) – 2009-12-17 17:14:03