0

我有 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 中解决?

谢谢。

4

1 回答 1

1

这行得通吗?

select * from user left outer join posts_users on user.id = posts_users.user_id left outer join posts on posts.id = posts_users.post_id where timestamp = '4-17-2012' or timestamp = NULL

于 2012-04-17T21:45:19.273 回答