次のクエリがあります。
$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')
)
);
私の目標は、table2 のフィールドが入力されている場合に選択することですが、これらが空である場合、または行が見つからない場合は、元のテーブルのフィールドが表示されます。
ただし、私の出力は期待どおりではありません。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: テーブル構造:
Table1 (元のテーブル)
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 から値を取得します。