SELECT n.type, n.type_id, n.data,
(CASE WHEN (n.type='users') THEN users.u_name ELSE NULL END) AS user_name,
(CASE WHEN (n.type='blogs') THEN blogs.b_name ELSE NULL END) AS blog_name
FROM notifications AS n
LEFT JOIN users ON (CASE
WHEN (n.type='users') AND n.type_id=users.id THEN 1
ELSE 0
END = 1)
LEFT JOIN blogs ON (CASE
WHEN (n.type='blogs') AND n.type_id=blogs.id THEN 1
ELSE 0
END = 1)
WHERE n.receiver_id = 1
ORDER BY n.id DESC LIMIT 20
これは機能しますが、使用します。 filesortの使用、結合バッファーの使用(フラット、BNL結合)、結合バッファーの使用(増分、BNL結合)。それは良く見えません。MySQL:条件付き結合によるクエリの改善
さらにより、LEFTはINNERでなければなりませんが、内部でそれがどんな結果が表示されない...(と同じtemporarys、filesorts、バッファなど)参加
私は別の構文が(おそらく間違っtryied )同じ結果を:
(CASE WHEN (n.type='blogs') THEN n.type_id=blogs.id ELSE NULL END)
私は2つのクエリを行うことができますが、私は1つでそれをやろうとしている:)
は、それは私に何の結果が得られていないと "エクストラ:インポッシブルWHERE" と他のすべてがNULLのフィールドを説明します。 – Vixxs
それは本当に奇妙です。あなたの質問にサンプルデータと予想される結果を加えてください。 –
n.typeはユーザーまたはブログと異なる場合があります。ユーザーまたはブログの名前を必要としない操作からのものでもかまいません。 – Vixxs