我有 3 张桌子。一个用于用户,一个用于帖子,以及一个连接其他两个表的连接表。
这是连接表中的一些示例数据。
| 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) 选择时间戳为 4-17-2012 的用户的所有帖子
和
2) 如果该用户的联接表中没有帖子条目,请同时选择这些帖子。
所以... 对于 user_id = 1,将选择帖子 1,但不会选择帖子 2,因为帖子 2 不是 2012 年 4 月 17 日 对于 user_id = 2,将选择两个帖子,帖子 1 因为没有 user_id 条目= 2 and post_id = 1, and post 2 因为它是 4-17-2012 对于 user_id = 3,不会返回 post 1,但会返回 post 2,因为没有 user_id = 3 和 post_id = 2 的条目。
这是我一直在尝试的示例:
SELECT * FROM posts AS p LEFT JOIN posts_users as pu ON (p.post_id = pu.post_id) WHERE ((pu.user_id = $user_id AND pu.timestamp = 4-17-2012) OR (pu.post_id IS NULL)
如果帖子中有一个 post_id = 3 行,那么它对于所有 posts_users 列都将具有 NULL,因为 LEFT JOIN 有助于满足#2。但是,如果有任何人的 post_id = 3 的 post_users 条目,那么就不会有 NULL。MySQL 中有没有办法让我们拥有#2 的逻辑?
我在一个已经用 PHP 编写的框架中完成了这一切,并且以某种方式使我很难处理使用 PHP 过滤返回的结果。相信我。有没有办法让我使用 SQL 语句来完成此操作,或者在获得其他查询的结果后,我是否必须尝试在 PHP 中解决?
谢谢。