考虑mysql
SELECT If(
(SELECT `price` FROM `prices` AS `B` WHERE `A`.`Item_ID` = `B`.`Item_ID`)<5,
5,
(SELECT `price` FROM `prices` AS `B` WHERE `A`.`Item_ID` = `B`.`Item_ID`)
) AS `Item_Price'
FROM `items` AS `A`
它曾经从 items
表中的每个项目的 prices
表中查找价格,如果价格小于 5,则为 5。问题在于,如果 IF
语句为假,即价格大于或等于 5,则它会再次搜索相同的价格,这可能会减慢页面速度。有没有办法改善这个?
最佳答案
您可以使用简单的 LEFT JOIN
代替子查询:
SELECT If(COALESCE(`price`, 0) < 5, 5, `price`) AS `Item_Price'
FROM `items` AS `A`
LEFT JOIN `prices` AS `B` ON `A`.`Item_ID` = `B`.`Item_ID`
这假设 items
和基于 Item_ID
的 prices
之间存在一对一的关系。如果您的初始查询运行没有问题并且您的子查询仅返回一个标量值,那么这种一对一关系确实存在。
关于php - 如何改进 MySQL 中的 IF 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335513/