繁体   English   中英

优化2个mysql查询到一个

[英]Optimize 2 mysql queries to one

用户有宠物 ,宠物可能有图片可以将一张图片设置为主图片(mainpic = 0或mainpic = 1)

我需要从pets表中获取所有pet数据,我还需要mainid = 1或第一张图片的图片ID,如果他在图片表中没有图片,则返回null。 即使根本没有图片,我也需要获取宠物数据。

目前,我使用2个查询来完成此操作:SELECT * FROM pets WHERE pets.userId ='$ userId'ORS BY pets.created ASC LIMIT 5 ...每个结果:SELECT ID FROM pictures WHERE petId ='$ petId'ORDER按主要类型DESC LIMIT 1

我需要在一个查询中进行优化。

谢谢,哈姆雷特

使用内部联接忽略不匹配的记录

select * 
from pets inner join pictures 
on pets.id = petId and mainpic=1
where userId=? 
order by pets.created ASC limit 5

如果您只希望在图片相关字段中为空,但想要宠物信息(您的Q有点不清楚),请使用左联接

select * 
from pets left join pictures 
on pets.id = petId and mainpic=1
where userId=? 
order by pets.created ASC limit 5

尝试这个:

SELECT * FROM pets
INNER JOIN pictures ON pictures.petid = pets.id AND pictures.mainpic = 1
WHERE pets.userid='$userid'
SELECT *
FROM pets p
     LEFT OUTER JOIN (
        SELECT *
        FROM pictures pict
        WHERE pict.mainpic = 1
     ) pict ON pict.petid = p.petid
WHERE p.userid = '$userid'
SELECT  (
        SELECT  id
        FROM    pictures pi
        WHERE   pi.petid = pe.petid
        ORDER BY
                mainpic DESC
        LIMIT 1
        )
FROM    pets pe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM