【发布时间】:2021-10-02 22:29:51
【问题描述】:
我正在建立一个数据库,用于存储名为“新闻”的网站的帖子。每个新闻帖子都可以存储一些 (0-255) 媒体。我可以像这样获取所有数据:
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
返回:
| news.id | title | created | media.id | news_id | filename |
|---|---|---|---|---|---|
| 1 | Title1 | ... | NULL | NULL | NULL |
| 2 | Title2 | ... | NULL | NULL | NULL |
| 3 | Title3 | ... | NULL | NULL | NULL |
| 4 | Title4 | ... | NULL | NULL | NULL |
| 5 | Title5 | ... | 1 | 5 | media1.png |
| 5 | Title5 | ... | 2 | 5 | media2.png |
请注意,news.id = 5 出现了两次,因为它有两张与之关联的图像。
我的目标是获得最新的 3 篇这样的帖子
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
ORDER BY created DESC
LIMIT 3
返回:
| news.id | title | created | media.id | news_id | filename |
|---|---|---|---|---|---|
| 5 | Title5 | ... | 2 | 5 | media2.png |
| 5 | Title5 | ... | 1 | 5 | media1.png |
| 4 | Title4 | ... | NULL | NULL | NULL |
但是我希望它返回所有 ID 为 5、4 和 3 的帖子以及它们的所有媒体,如下所示:
| news.id | title | created | media.id | news_id | filename |
|---|---|---|---|---|---|
| 5 | Title5 | ... | 2 | 5 | media2.png |
| 5 | Title5 | ... | 1 | 5 | media1.png |
| 4 | Title4 | ... | NULL | NULL | NULL |
| 3 | Title3 | ... | NULL | NULL | NULL |
MySql 是否可以做到这一点,或者是否有其他数据库组织可以做到这一点?基本上我只想限制 LEFT 表的结果,让“重复”出现,这样我仍然可以获得所有 RIGHT 表数据。我正在使用 PHP 准备好的语句来进行这些 MYSQL 查询,所以我可能无法使用子查询,但我不确定。
【问题讨论】:
-
如果您选择这样做,准备好的语句不会限制您使用子查询的能力