You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:08