正しい結果を返すにはおそらく微調整が必要ですが、アイデアが得られることを願っています:
SELECT ft1.task, COUNT(ft1.id) AS count
FROM feed_tasks ft1
LEFT JOIN pages p1 ON ft1.type=1 AND p1.id = ft1.reference_id
LEFT JOIN urls u1 ON ft1.type=2 AND u1.id = ft1.reference_id
WHERE COALESCE(p1.id, u1.id) IS NOT NULL
AND ft1.account_id IS NOT NULL
AND a1.user_id = :user_id
編集:
CASE...END
についてのちょっとしたメモ 。 PHPやJavaScriptとは異なり、SQL CASE
が原因で、元のコードは実行されません。 コードのどの部分を実行するかを選択できるフロー制御構造ではありません。代わりに、式を返します。だからあなたはこれを行うことができます:
SELECT CASE
WHEN foo<0 THEN 'Yes'
ELSE 'No'
END AS is_negative
FROM bar
...しかしこれではありません:
-- Invalid
CASE
WHEN foo<0 THEN SELECT 'Yes' AS is_negative
ELSE SELECT 'No' AS is_negative
END
FROM bar