2009-12-16 84 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