2014-01-08 5 views
1

Проблемы в моем запросе, особенно в этой части:конкатенация с использованием MySQL переменной

@a:= concat(@a, ',', B.call_account_id) AS paid_account_id 

Вот весь запрос:

SELECT operator_id, paid_account_ids, SUM(goods_count * price) AS sales_volume, count(*) AS sales_cnt 
FROM (
    SELECT B.operator_id, @a:= concat(@a, ',', B.call_account_id) AS paid_account_ids, B.call_time, A.goods_count, A.price, UNIX_TIMESTAMP(A.completion_date) AS paid_ts 
    FROM call_module_data B 
    INNER JOIN ak_accounts A ON (A.account_id = B.call_account_id AND A.goods_count >=1) 
    WHERE B.call_status IN (1,7) AND A.status_id = 5 
    AND operator_id IN ($op_ids) 
    $and_str_accounts 
    GROUP BY A.account_id 
    HAVING call_time < (paid_ts + $time_shift) 
    ) AS T 
GROUP BY operator_id"; 

Таким образом, выражение упоминалось выше, следует произвести каскадную строку учетной записи ids (например, 3341,4355,4433 ...). Но вместо нужной строки я получил NULL. Пожалуйста, помогите решить. Заранее спасибо.

+0

У вас есть цитата и точка с запятой в конце, поэтому это не сработает. –

ответ

1

Использование GROUP_CONCAT() функции вместо Объединение строк

Изменить

@a:= concat(@a, ',', B.call_account_id) AS paid_account_id 

выше строки в

GROUP_CONCAT(B.call_account_id) AS paid_account_ids 

Final Ответ:

SELECT operator_id, GROUP_CONCAT(paid_account_ids) AS paid_account_ids, 
     SUM(goods_count * price) AS sales_volume, COUNT(*) AS sales_cnt 
FROM (SELECT B.operator_id, GROUP_CONCAT(B.call_account_id) AS paid_account_ids, 
      B.call_time, A.goods_count, A.price, 
      UNIX_TIMESTAMP(A.completion_date) AS paid_ts 
     FROM call_module_data B 
     INNER JOIN ak_accounts A ON A.account_id = B.call_account_id AND A.goods_count >=1 
     WHERE B.call_status IN (1,7) AND A.status_id = 5 AND operator_id IN ($op_ids) 
      $and_str_accounts 
     GROUP BY A.account_id HAVING call_time < (paid_ts + $time_shift) 
    ) AS T 
GROUP BY operator_id; 
+0

Похоже, он должен работать, но я получаю только первый идентификатор учетной записи вместо конкатенированной строки!? –

+0

@SergeyOnishchenko Проверьте мой обновленный ответ –

+0

Спасибо большое! Он работает сейчас. –

Смежные вопросы