PHP开发中如何查询daily_rates表前两条记录的daily_rate_price总和
错误原因
你编写的SQL执行逻辑不符合需求:SQL执行顺序为WHERE筛选→聚合计算→LIMIT截断,现有写法会先把所有满足daily_rate_reservation=$reservationId条件的记录全部求和,得到唯一一行聚合结果,后续的LIMIT 2完全不会生效,因此无法得到前两条记录的价格之和。
正确实现方案
需要先通过子查询筛选出符合条件的前2条记录,再对这部分记录的价格字段求和,示例代码如下:
SELECT SUM(sub.daily_rate_price) AS accomTotal FROM ( SELECT daily_rate_price FROM daily_rates WHERE daily_rate_reservation = $reservationId -- 请根据业务需求调整排序规则,明确"前两条"的判定标准 ORDER BY daily_rate_date ASC LIMIT 2 ) AS sub;
注意事项
- 必须补充
ORDER BY子句:SQL在没有指定排序规则的情况下,返回的记录顺序是不确定的,直接使用LIMIT 2可能获取到非预期的记录,你可以根据业务需求选择按daily_rate_id(主键顺序)、daily_rate_date(日期顺序)等字段排序。 - 若你使用的数据库支持公共表表达式(MySQL 8.0+、PostgreSQL、SQL Server等),也可以使用CTE写法,逻辑和子查询完全一致:
WITH top_two_records AS ( SELECT daily_rate_price FROM daily_rates WHERE daily_rate_reservation = $reservationId ORDER BY daily_rate_date ASC LIMIT 2 ) SELECT SUM(daily_rate_price) AS accomTotal FROM top_two_records;
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

