php - 如何改进 MySQL 中的 IF 语句?

标签 php mysql sql if-statement

考虑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_IDprices 之间存在一对一的关系。如果您的初始查询运行没有问题并且您的子查询仅返回一个标量值,那么这种一对一关系确实存在。

关于php - 如何改进 MySQL 中的 IF 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335513/

相关文章:

php - 自动运行一个php脚本

mysql - 为什么 DriverManager.getConnection() 查找在 GroovyConsole 中失败?

mysql - SQL:如何获取仅包含某些 ID 的行?

php - 创建一个具有多个文本区域的 wordpress 小部件

php - 使用 php 和 mysql 登录表单出错

php - 数据库中的表与实体模式不一致

php - 在少数情况下拆分文本 (PHP)

mysql - 组函数MySql的无效使用

使用分区依据的 SQL 查询

python - 不使用任何数据库的类数据库操作