我有以下查询:Yii的活动记录COALESCE不显示结果
$result = Table1::model()->findAll(array(
'with' => array(
'table2' => array(
'joinType' => 'LEFT JOIN',
'on' => 'pk = fk AND fk=1'
)
),
'select' => array('name',
'COALESCE(table2.price, t.standardprice) AS price',
'COALESCE(table2.period, t.period) AS period')
)
);
我的目标是挑选表2的领域,如果这些被填充,但是如果这些都是空的/没有行发现,原来表的字段应被显示。
但是,我的输出与预期不符。 price
字段在我的结果的属性中完全不显示,而period
字段为table2的值或为空。
编辑:也许我的SQL是错误的地方。使用这个SQL给我想要的结果:
SELECT name, COALESCE(tb1.price, tb2.standardprice) as price, COALESCE(tb1.period, tb2.period) as period
FROM table1 as tb1
LEFT JOIN table2 as tb2
ON (tb1.pk= tb2.fk) AND fk=1;
然而,我没有看到我目前的代码有任何区别。
EDIT2:表结构:
表1(原始表)
pk (int 11) - Primary key, auto increment
name (varchar 255)
standardprice (decimal 11,2)
period (varchar 255)
fkLanguage //not relevant
photo //not relevant
description //not relevant
link //not relevant
表2
ID (int 11) - Primary key, auto increment
fk (int 11) - Foreign key, which links to pk of table1
period (varchar 255)
price (decimal 11,2)
fkType //not relevant
amount //not relevant
澄清:该fk=1
是确实是一个JOIN条件。如果fk不是1,那么我不希望这些行加入,而是从table1中取值。
你为什么要补充一点:和FK = 1? –
@AladdinHoms我只需要从第二个表中选择某些行的ID,而不是全部。稍后,这将成为一个参数,如'fk =:id' –
您是否在模型Tablename的表中有属性'price'和'period'?你能展示它的结构吗? – CreatoR