Mysql MariaDB子查询

Mysql MariaDB子查询,mysql,laravel,mariadb,Mysql,Laravel,Mariadb,你好 我有这个SQL,但不是在托管工作。在局域网上一切都很好。我找不到问题所在。 Laravel项目SQL: $data=DB::选择' 选择 DATEo.created_于年月日创建, countid作为count_all, countSELECT id,其中status=3表示成功, countSELECT id,其中status=5作为退货单, count选择状态为0或状态为4或状态为8的id作为调用顺序, count选择状态为7或状态为6或状态为1的id作为otkaz, Count选择i

你好

我有这个SQL,但不是在托管工作。在局域网上一切都很好。我找不到问题所在。 Laravel项目SQL:

$data=DB::选择' 选择 DATEo.created_于年月日创建, countid作为count_all, countSELECT id,其中status=3表示成功, countSELECT id,其中status=5作为退货单, count选择状态为0或状态为4或状态为8的id作为调用顺序, count选择状态为7或状态为6或状态为1的id作为otkaz, Count选择id,其中状态=2作为nado_dostavit, 选择提供价格作为所有价格, SUMSELECT offer\u price,其中status=3为success\u price, SUMSELECT offer\u price,其中status=5作为退货\u订单\u价格, 选择状态为0或状态为4或状态为8的报价作为通知价格, 选择状态为7或状态为6或状态为1的报价作为otkaz价格, SUMSELECT报价,其中状态=2为nado dostavit价格, 从统计中选择sums.visitors作为s,其中s.offer_id=“.$user_id.”作为访问者 从…起 命令为o 哪里 offer_id='.$user_id' 并在“$mother\u later.”和“$today”之间创建了“u” 按天分组 按日订购 限制30 '; 错误:

2/2查询异常

SQLSTATE[42000]:语法错误或访问冲突:1064您有 SQL语法错误;检查与您的产品相对应的手册 MariaDB服务器版本,以便在“WHERE”附近使用正确的语法 状态=3表示成功


您的子查询都没有FROM子句,这就是为什么会出现语法错误的原因。但是,您实际上不希望子查询位于这些位置。对于计数,您应该将其替换为例如

SUM(CASE WHEN status=3 THEN 1 ELSE 0 END)
对于总数,您应该使用例如

SUM(CASE WHEN status=3 THEN offer_price ELSE 0 END)
因此,总的来说,您的查询应该是:

$data = DB::select('
        SELECT 
            DATE(o.created_at) as day,
            count(id) as count_all,
            SUM(CASE WHEN status=3 THEN 1 ELSE 0 END) as success,
            SUM(CASE WHEN status=5 THEN 1 ELSE 0 END) as return_order,
            SUM(CASE WHEN status=0 OR status=4 OR status=8 THEN 1 ELSE 0 END) as call_order,
            SUM(CASE WHEN status=7 OR status=6 OR status=1 THEN 1 ELSE 0 END) as otkaz,
            SUM(CASE WHEN status=2 THEN 1 ELSE 0 END) as nado_dostavit,

            SUM(offer_price) as all_price,
            SUM(CASE WHEN status=3 THEN offer_price ELSE 0 END) as success_price,
            SUM(CASE WHEN status=5 THEN offer_price ELSE 0 END) as return_order_price,
            SUM(CASE WHEN status=0 OR status=4 OR status=8 THEN offer_price ELSE 0 END)  as call_order_price,
            SUM(CASE WHEN status=7 OR status=6 OR status=1 THEN offer_price ELSE 0 END) as otkaz_price,
            SUM(CASE WHEN status=2 THEN offer_price ELSE 0 END) as nado_dostavit_price,
            (SELECT sum(s.visitors) FROM statistics as s WHERE s.offer_id='.$user_id.') as visitors
        FROM 
            orders as o
        WHERE 
              offer_id='.$user_id.'
              AND  created_at between "'.$mother_later.'" AND "'.$today.'"
        GROUP BY day
        ORDER BY day desc
        limit 30
');

SELECTs通常包含FROM子句,因此“一切正常”的概念似乎值得怀疑。如果status=3,则1 ELSE 0 END可以缩短为SUMstatus=3@RickJames你完全正确。我只是想说得更一般些。