gpt4 book ai didi

php - SQL - 执行此查询的最有效方式?

转载 作者:行者123 更新时间:2023-11-30 21:24:08 26 4
gpt4 key购买 nike

我基本上有三个表,posts,images 和 postimages(这只包含其他两个表的 ID,并允许每个帖子中有多个图像,并且如果需要,每个图像可以在多个帖子中重复使用)。

我正在尝试列出所有帖子的标题,以及每个帖子的一张小图片(如果存在的话)

我可以通过以下方式做到这一点:

    $sql ="SELECT * FROM posts p, images im, postimages pi WHERE
AND pi.post_id = p.id
AND pi.image_id = im.image_id
ORDER BY created_at LIMIT 10";

但显然,如果图片不止一张,则记录显示两次。

我知道我可能可以使用子查询来完成它,但这似乎非常低效。有没有更优雅的方法解决这个问题?

如有任何建议,我们将不胜感激。谢谢。

最佳答案

select
*
from
posts p
left outer join (select post_id, max(image_id) as image_id
from postimages group by post_id) pi on
p.id = pi.post_id
left outer join images im on
pi.image_id = im.image_id

您可以执行子查询,这样它只需执行一次,而不是每行执行一次。这样,它被用作整个表的子查询,然后加入到帖子中。显然,如果您想拍摄第一张图片,这可以是 MIN(image_id)。真的,随心所欲。

编辑:将其设为左外连接 以捕获帖子中不存在的那些图像。如果图像恰好不存在,这将为图像返回 null

关于php - SQL - 执行此查询的最有效方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com