[英]Optimize 2 mysql queries into one
使用php和mysql5.x。 我目前在网站的特定部分加载横幅图片,如下所示:
SELECT * FROM banners WHERE section = 1 AND pageid = 2
但是,如果未找到结果,则运行第二个查询:
SELECT * FROM banners WHERE section = 1 AND pageid = 0
基本上,我正在做的是尝试查找分配给该页面该部分的横幅图像。 如果未找到结果,则在第二个查询中寻找任何默认的横幅图像。 有没有更好的方法可以在一个查询中执行此操作?
编辑
要澄清一点。 我想检查是否有分配给该页面的横幅,如果没有,请查看是否有分配给0的横幅(默认)。 我既不希望混合显示分配给该页面的所有横幅,也不希望显示分配给pageid 0的所有横幅,并且有可能返回多个行而不仅仅是一个。
附加编辑
为了更好地解释这是为了什么。 在管理工具中,我允许某人将横幅图像分配给网站上的部分。 他们可以在管理工具中选择要显示标题图像的部分和页面。 他们还可以为该部分设置默认的横幅图像。 因此,如果默认情况下没有将横幅图像分配给某个部分,则它将在整个网站中加载为该部分分配为0的横幅图像。 因此,不必将默认的横幅图像分配给50个不同的页面,他们只需执行一次,它将为该部分加载默认的横幅图像。 只是试图找到一种以更优化的方式进行此操作的方法,而不是一次可以完成2个查询?
该OR
操作将使条件(pageid = 2 OR pageid = 0)
返回true
立即如果只是第一个值是true
,并因为有一个LIMIT 1
,我认为它应该永远去取用pageid = 2
首先,因为顺序pageid
是DESC
并且2大于0。
SELECT * FROM banners WHERE section = 1 AND (pageid = 2 OR pageid = 0) ORDER BY pageid DESC LIMIT 1
编辑 :如果需要ORDER BY
,我不太肯定,我很乐意看到一些评论
也许这不是最优雅的方法,但是您可以尝试以下方法:
SELECT *
FROM banners
WHERE section = 1
AND pageid = IF(
(select count(*) from banners where section = 1 and pageid = 2) = 0,
0, 2
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.