@Pettttttro

Ошибка в запросе mysql?

Есть такой запрос

SELECT t1.id AS company_id,
(SELECT GROUP_CONCAT(id) from lists_prod where campaign_id = t1.id) as lists_id,

(SELECT COUNT(*)
  FROM `sent`
        WHERE `list_id` IN (lists_id)
       ) AS count
       
      FROM companies t1 LIMIT 100;


Он в принципе работает, но не не находит правильные данные WHERE `list_id` IN (lists_id)
Почему он не находит я понимаю, потому что lists_id строка
Но как можно решить проблему.

Есть вариант сделать так, но так очень долго отрабатывает
SELECT t1.id AS company_id,
(SELECT COUNT(*)
  FROM `sent`
        WHERE `list_id` IN (SELECT id from lists_prod where campaign_id = t1.id)
       ) AS count
       
      FROM companies t1 LIMIT 100;
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@nozzy
Symfony, Laravel, SQL
Попробуйте с переменной
SELECT t1.id AS company_id,
(SELECT @lists_id := GROUP_CONCAT(id) from lists_prod where campaign_id = t1.id),

(SELECT COUNT(*)
  FROM `sent`
        WHERE `list_id` IN (@lists_id)
       ) AS count
       
      FROM companies t1 LIMIT 100;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
SELECT t1.id AS company_id,
(SELECT COUNT(*)
  FROM `sent`
        WHERE `list_id` IN (SELECT id from lists_prod where campaign_id = t1.id)
       ) AS count
      FROM companies t1 LIMIT 100;

Шаг следующий - переписать в join с подзапросом.

Если это надо делать часто - сделайте companies отдельное поле и сохраняйте туда count. Можно поддерживать актуальности триггерами, можно - периодически пересчитывать, можно что-то между этими двумя вариантами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы