Вот мой запрос
SELECT
SUM(o.order_disc + o.order_disc_vat) AS manualsale
FROM
orders o
WHERE
o.order_flag IN (0 , 2, 3)
AND o.order_status = '1'
AND (o.assign_sale_id IN (SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92))
AND DATE(o.payment_on) = DATE(NOW())
выше запрос возвращает ноль, когда я запускаю этот запрос в терминале
Когда я использую подзапрос ниже, он возвращает данные
SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92)
вышеуказанный запрос возвращает
'106,124,142,179'
и когда я запускаю свой первый запрос, как показано ниже
SELECT
SUM(o.order_disc + o.order_disc_vat) AS manualsale
FROM
orders o
WHERE
o.order_flag IN (0 , 2, 3)
AND o.order_status = '1'
AND (o.assign_sale_id IN (106,124,142,179))
AND DATE(o.payment_on) = DATE(NOW())
это возвращает мне значение. Почему не работает подзапрос, помогите
о. assign_sale_id имеет тип данных int






Это не делает то, что вы хотите:
AND (o.assign_sale_id IN (SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92))
Это сравнивает одно значение со списком значений, разделенных запятыми, поэтому оно никогда не совпадает (если только для данной команды нет только одной строки в пользователях).
Вы можете сформулировать это так:
AND assign_sale_id IN (SELECT id FROM users WHERE team_id = 92)
Но это, вероятно, было бы более эффективно выражено с помощью exists:
AND EXISTS(SELECT 1 FROM users u WHERE u.team_id = 92 AND u.id = o.assign_sale_id)
Примечание: я бы также рекомендовал переписать это условие:
AND DATE(o.payment_on) = DATE(NOW())
К следующему, который может воспользоваться индексом:
AND o.payment_on >= current_date AND o.payment_on < current_date + interval 1 day
Спасибо @GMB assign_sale_id IN (ВЫБЕРИТЕ идентификатор ОТ пользователей, ГДЕ team_id = 92) я использовал это, я не знаю, как я могу сделать эту глупую ошибку, спасибо за вашу помощь, приятель
Какой тип данных у o.assign_sale_id