私は今プロジェクトに取り組んでおり、実行する特定のSQLクエリ(必要なもの)で困惑しています。私が引き出す必要のあるDB構造を見せてください。MySQLクエリ - ユーザIDとビジネスIDに基づいて
--posts_table--
ID
post_title
post_text
bus_id
次の表は、私と一緒にねじ込むものです。ログインしているユーザーに関連するデータは、特定の投稿を「好き」している場合のみ表示されます。そうでなければ、そのユーザーに関連するデータはこの表にはありません。他のユーザーから生成されたばかりの特定の投稿に関連するデータがたくさんある可能性があります。
--likes_table--
ID
user_id
post_id
like
私がこれを行うには、特定のビジネスIDが指定されているpost_tableのすべての投稿を取得する必要があります。そこから、ログインしたユーザーに関連するデータがある場合、likes_tableの「like」列を取得する必要があります。そこにデータがない場合は、そのフィールドをクエリにnullのままにしておきます。以下は、他のユーザーのlike_tableに他の "好きな"データがあるまで、私が書いたクエリです。
SELECT posts.id, posts.post_text, posts.post_title, likes.post_id, likes.like
FROM posts LEFT JOIN likes ON posts.id = likes.post_id WHERE
posts.bus_id = 1 AND likes.user_id IS NULL OR likes.user_id = 1;
データは、そのユーザは、彼らがそれを好きか嫌いか、そのポストで何もしていた前に、別のユーザーに好かれている特定のポストについてのテーブルに入力されるまでこれがアップ動作します。私は、この特定のタイプのクエリーが可能であっても、どんな助けでも大いに感謝されるかどうかはわかりません。
編集:
再びそれを見た後 - 私は最終的に、それを得ました。私はちょうどもう1つを追加する必要があった。以下は、私が探していた適切なクエリです。それは、特定のポストは全くuser_id
数1でのコメントされていない場合には、そのための行がまったく表示されないということである -
SELECT posts.id, posts.post_text, posts.post_title, likes.post_id, likes.like
FROM posts LEFT JOIN likes ON posts.id = likes.post_id AND posts.user_id = 1 WHERE
posts.bus_id = 1 AND likes.user_id IS NULL OR likes.user_id = 1;
あなたの質問が「うまくいかない」理由を理解するのに困っています。あなたの問題を再現する 'posts_table'と' likes_table'の小さなスニペットを与えることができますか?ですから、投稿1がbus_id 1を持っていてuser_id 1以外のユーザーが好きなら、あなたの質問は何を返すのですか?それは間違っていますか? –
申し訳ありません - 説明するのは難しいです。他のユーザーからのその投稿に関連するlikesテーブルにデータがなかった場合にのみ、それは機能し、投稿データを返します。 – thefiddler
私はあなたを得る - あなたがしたようにそれを考え出した。 'LEFT JOIN'に追加した後は、' WHERE'条件に 'likes.user_id IS NULL OR likes.user_id = 1'を追加する必要はありません。 (あなた自身の質問を解決しました。あなたの答えを回答として投稿し、それを受け入れることは自由です)。 –