gpt4 book ai didi

php - Yii CDbCriteria Joins 的小问题

转载 作者:行者123 更新时间:2023-11-29 13:02:03 24 4
gpt4 key购买 nike

我有以下表格aliados(主表和我试图从中检索记录的表)。aliados_direccion,其外键为 aliados_idaliados_centro_medico 也有 aliados_id 作为外键,并且可以与下表建立 Many_Many 关系。centro_medico。

在aliados_direccion和centro_medico中,有一个名为“parroquias_id”的列,它来自另一个对此查询不重要的表。

我试图让网格向我显示一些“aliados”,如果他们有与他们相关的aliados_direccion或aliados_centro_medico,其中aliados_direccion.parroquias_id或centro_medico.parroquias_id位于一个数组中,该数组取决于用户已登录。

数组没问题,mysql读取也没有问题,问题出在实际查询中。

$criteria=new CDbCriteria;
$criteria->select='a.*';
$criteria->alias='a';
$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir
WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id';
$criteria->join='RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many
INNER JOIN (SELECT centro_medico.id as idCM
FROM centro_medico
WHERE centro_medico.parroquias_id
IN ('.$zonas.')) cm
ON cm.idCM = many.centro_medico_id) acm
ON acm.mAlId = a.id';
$criteria->compare(blahblahblah);
//BTW $zonas is the array that I previously built

这里发生的情况是,网格要么显示所有记录,要么不显示任何记录,具体取决于我使用左连接还是右连接。我也尝试使用关系的别名,例如>

if($this->aliados_direccion){
//First Criteria Join
elseif($this->aliados_centro_medico){
//Second Criteria Join
}

但是当我这样做时,即使我使用 INNER JOIN 代替,它仍然会给我带来所有记录。

最佳答案

您用下一个连接替换了第一个连接。

$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir
WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id';
$criteria->join='RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many
INNER JOIN (SELECT centro_medico.id as idCM
FROM centro_medico
WHERE centro_medico.parroquias_id
IN ('.$zonas.')) cm
ON cm.idCM = many.centro_medico_id) acm
ON acm.mAlId = a.id';

Join是CDbCriteria字段,所以需要将它们组合起来

$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir
WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id
RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many
INNER JOIN (SELECT centro_medico.id as idCM
FROM centro_medico
WHERE centro_medico.parroquias_id
IN ('.$zonas.')) cm
ON cm.idCM = many.centro_medico_id) acm
ON acm.mAlId = a.id';

关于php - Yii CDbCriteria Joins 的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com