MYSQL 仅限制左侧 table 的结果,但显示右侧 table 的所有结果
MYSQL Only limit results from left table, but show all results from right table
我正在建立一个数据库,用于存储名为“新闻”的网站的 posts。每个新闻 post 可以存储一些 (0-255) 个媒体。我可以这样获取所有数据:
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
哪个 returns:
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 post
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
ORDER BY created DESC
LIMIT 3
哪个 returns:
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
但是我希望 return 所有 ID 为 5、4 和 3 的 post 及其所有媒体,如下所示:
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 table 的结果并让“重复”出现,这样我仍然可以获得所有 RIGHT table 数据。我正在使用 PHP 准备好的语句来进行这些 MYSQL 查询,所以我可能无法使用子查询,但我不确定。
Select 来自获取最后 3 个帖子的子查询,而不是整个 table.
SELECT *
FROM (
SELECT *
FROM news
ORDER BY created DESC
LIMIT 3
) AS news
LEFT JOIN media ON news.id = news_id
我正在建立一个数据库,用于存储名为“新闻”的网站的 posts。每个新闻 post 可以存储一些 (0-255) 个媒体。我可以这样获取所有数据:
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
哪个 returns:
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 post
SELECT *
FROM news
LEFT JOIN media ON news.id = news_id
ORDER BY created DESC
LIMIT 3
哪个 returns:
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 |
但是我希望 return 所有 ID 为 5、4 和 3 的 post 及其所有媒体,如下所示:
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 table 的结果并让“重复”出现,这样我仍然可以获得所有 RIGHT table 数据。我正在使用 PHP 准备好的语句来进行这些 MYSQL 查询,所以我可能无法使用子查询,但我不确定。
Select 来自获取最后 3 个帖子的子查询,而不是整个 table.
SELECT *
FROM (
SELECT *
FROM news
ORDER BY created DESC
LIMIT 3
) AS news
LEFT JOIN media ON news.id = news_id