MariaDB Subquery - PullRequest
       5

MariaDB Subquery

0 голосов
/ 25 августа 2018

Добрый день!

У меня есть этот SQL, но он не работает на хостинге.В локальной сети все нормально.Я не мог найти, в чем проблема.Проект Laravel SQL:

$data = DB::select('
            SELECT 
                DATE(o.created_at) as day,
                count(id) as count_all,
                count((SELECT id WHERE status=3)) as success,
                count((SELECT id WHERE status=5)) as return_order,
                count((SELECT id WHERE status=0 or status=4 or status=8)) as call_order,

                count((SELECT id WHERE status=7 or status=6 or status=1)) as otkaz,
                count((SELECT id WHERE status=2)) as nado_dostavit,

                SUM((SELECT offer_price)) as all_price,
                SUM((SELECT offer_price WHERE status=3)) as success_price,
                SUM((SELECT offer_price WHERE status=5)) as return_order_price,
                SUM((SELECT offer_price WHERE status=0 or status=4 or status=8)) as call_order_price,
                SUM((SELECT offer_price WHERE status=7 or status=6 or status=1)) as otkaz_price,
                SUM((SELECT offer_price WHERE status=2 )) 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
    ');

ОШИБКА:

(2/2) QueryException

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас естьошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать рядом с 'WHERE status = 3)), если все успешно,

1 Ответ

0 голосов
/ 25 августа 2018

Ни в одном из ваших подзапросов нет предложений FROM, поэтому вы получаете синтаксическую ошибку.Однако на самом деле вам не нужны подзапросы в этих позициях.Для COUNT вы должны заменить их, например,

SUM(CASE WHEN status=3 THEN 1 ELSE 0 END)

, а для SUM s вы должны использовать, например,

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
');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...