gpt4 book ai didi

mysql左连接可以使用右表中的一条最新记录吗?

转载 作者:行者123 更新时间:2023-11-29 18:29:57 27 4
gpt4 key购买 nike

我不再明白了。对于我们俱乐部的网站,我想展示我们俱乐部中所有弹球机的概述。 1 有 2 张 table

表1-柜子

cabid | owner | cabname |valid | description
--------------------------------------------------
1 | 3 | adams family | 1 | Lorem ipsum dolor sit amet
2 | 3 | Twilight zone | 1 | Lorem ipsum dolor sit amet
3 | 4 | AC/DC | 0 | Lorem ipsum dolor sit amet
4 | 5 | Lord of the Rings | 1 | Lorem ipsum dolor sit amet

表2-照片

photoid | cabid | ismain | photourl
-------------------------------------------------------------------
1 | 4 | 1 | fofofmasomfsaomfosa.jpg
2 | 4 | 0 | vdsnvnds89vds8vhsds.jpg
3 | 2 | 0 | v89ahv9sdvhs,jpg
4 | 2 | 0 | fsdfhsdfhsdavs.jpg
5 | 1 | 0 | sdv8ihsda98vhdsvs.jpg

etc
etc

否,我希望在一个查询中获得表 1 中所有有效橱柜的概述(有效 = 1)。如果有图片,请展示这张图片。 (不是每个柜子都有照片)如果用户将一张照片标记为主图片,则必须显示这张照片,(ismain) 否则最新的东西,例如 order by ismain DESC, photoid ASC

我现在有了这个

select c.*,p.*
from cabinets c
LEFT JOIN photos p USING (cabid )
where c.valid = '1'
GROUP by c.cabid
order by c.cabid DESC, p.ismain DESC, p.photoid ASC
LIMIT 5

但它显示了错误的照片,

通过 1 次快速查询可以获得我想要的结果吗?

最佳答案

速度在一定程度上取决于数据量,很大程度上取决于是否有索引。一般来说是可以的。一种方法是:

select DISTINCT c.*,p.*
from cabinets c
LEFT JOIN photos p ON c.cabid=p.cabid
where c.valid = '1'
order by c.cabid DESC, p.ismain DESC, p.photoid ASC
LIMIT 5

区别在于删除了 GROUP BY 。您正在使用GROUP BY在非 ANSI 模式下,其行为不可预测。另外,我看不出 GROUP BY 有任何用处。带着你的问题。

此查询的缺点是,它将首先返回 cabid=1 的所有照片。 ,因此,如果您有超过 5 张 cabid=1 的照片,则永远不会让您达到 2,3 等。已经。获取每个 cabid 的 5 张照片,您将必须查询每个 cabid通过添加 WHERE cabid=? .

关于mysql左连接可以使用右表中的一条最新记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773717/

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