私は3つのテーブルを持っています。ユーザー用に1つ、投稿用に1つ、および他の2つのテーブルをリンクする結合テーブル。MySQL JOIN - 複雑なSelectステートメント
ここに、結合テーブルのサンプルデータがあります。
| id | user_id | post_id | timestamp |
|----|---------|---------|-----------|
| 1 | 1 | 1 | 4-17-2012 |
| 2 | 1 | 2 | 4-16-2012 |
| 4 | 2 | 2 | 4-17-2012 |
| 5 | 3 | 1 | 4-16-2012 |
|____|_________|_________|___________|
は私が行いますSELECTクエリを書きたい次
1)2012年4月17日
と
のタイムスタンプを持つユーザーのすべての投稿を選択します2)そのユーザーの結合テーブルに投稿エントリがない場合は、それらの投稿も選択します。
だから... ...のuser_id = 1の場合 、1が選択されるが、2を投稿していない、ポスト2のuser_id = 2については2012年4月17日 ではないので、両方の記事が選択されることになるポスト、ポスト1理由user_id = 2、post_id = 1、投稿2は4-17-2012です user_id = 3の場合、post 1は返されませんが、post 2はuser_idのエントリがないためですPU ON(p.post_id = pu.post_id)としてposts_usersを登録しよう
SELECT *をP LEFT AS投稿者:= = 2
3とpost_idのは、ここで私がしようとしてきたものの一例ですWHERE(pu.user_id = $ user_id AND pu.timestamp = 4-17-2012)OR(pu.post_id IS NULL)
投稿にpost_id = 3行がある場合、NULLになりますすべてのposts_users列はLEFT JOINのため、#2を満たすのに役立ちます。しかしpost_id = 3のposts_usersエントリを持つ人がいれば、NULLはありません。 MySQLに#2のロジックを持たせる方法はありますか?
私はすでにPHPで書かれたフレームワークでこれをすべてやっています。返された結果をフィルタリングするためにPHPを使用する必要があります。私にそのことを信じてください。これを達成するためにSQL文を使用する方法がありますか、または他のクエリの結果を得た後にPHPで回避策を講じなければなりませんか?
ありがとうございました。
探しにuser.id = posts_users.user_id左外部結合のポストにposts_usersを外部結合左ユーザから選択します*これにさらに、それは私が存在しない使用することができるように見える?私は以前これを使用したことはありません。私はこのコンテキストでどのように使用しますか?再度、感謝します。 – MattDiamant