私のタイトルがそれをうまく説明しているかどうかわからないので、ここに例を示します。フィールド comment_id に基づいて一致する 2 つの MYSQL テーブル、comments と votes_comments があります。サンプル データのコメントには 2 つの行があり、votes_comments にはコメント行の 1 つに一致する 1 つの行があります。AKA 2 つのコメントが書き込まれ、1 人のユーザーがそのうちの 1 つに投票したことを考えると、次のクエリは 2 行を返します。
SELECT comments.*, users.username FROM comments
JOIN users ON users.user_id = comments.user_id
WHERE comments.track_id=6 AND comments.parent_id=-1
GROUP BY comments.comment_id
今私がやりたいことは、一致する行がある場合とない場合がある votes_comments に参加することです。私がやりたいことは、一致する値が存在する場合はそれを取得するか、一致する結果がない場合は列に null を返すことです。AKA: ユーザーが賛成票を投じたか、反対票を投じたか、まったく投票しなかったか (null)。ここに私の変更されたクエリがあります:
SELECT comments.*, users.username, votes_comments.vote FROM comments
JOIN users ON users.user_id = comments.user_id
LEFT JOIN votes_comments ON votes_comments.comment_id = comments.comment_id
WHERE track_id=6 AND parent_id=-1 AND votes_comments.user_id=1
GROUP BY comments.comment_id
votes_comments には 1 行しかないため、このクエリは 1 行しか返しません。左結合は希望どおりの結果を返すと思っていましたが、明らかにそうではありませんでした。私が探しているものを取得する方法はありますか?