Задать вопрос

Как укоротить запрос mysql?

SELECT `id`, `date`, `status` FROM `table`
        WHERE 
        uid IN (1,2,3,4,5) AND reg=1 AND date_last < NOW() - INTERVAL 1 DAY
        OR
        uid IN (1,2,3,4,5) AND reg=2 AND date_last < NOW() - INTERVAL 2 DAY
        OR
        uid IN (1,2,3,4,5) AND reg=3 AND date_last < NOW() - INTERVAL 3 DAY

Условие uid IN (1,2,3,4,5) одинаковое для всех 3 вариантов я хотел указать его один раз сразу после WHERE но тогда остальные два его не слушались. Скобки полагаю где-то нужны, но не соображу где
  • Вопрос задан
  • 354 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Никогда не смешивайте OR и AND в одном предложении без выделения своих намерений скобками явно.

WHERE 
        uid IN (1,2,3,4,5) AND reg IN (1,2,3) AND date_last < SUBDATE(CURRENT_DATE, reg)


Ну или длинно:
uid IN (1,2,3,4,5) AND (
        (reg=1 AND date_last < NOW() - INTERVAL 1 DAY)
        OR
        (reg=2 AND date_last < NOW() - INTERVAL 2 DAY)
        OR
        (reg=3 AND date_last < NOW() - INTERVAL 3 DAY)
)
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
SELECT `id`, `date`, `status` FROM `table`
WHERE uid IN (1,2,3,4,5) AND (
(reg=1 AND date_last < NOW() - INTERVAL 1 DAY) OR (reg=2 AND date_last < NOW() - INTERVAL 2 DAY)
OR (reg=3 AND date_last < NOW() - INTERVAL 3 DAY))


не знаю что такое reg но если это кол-во дней тогда можно написать так:
SELECT `id`, `date`, `status` FROM `table` WHERE uid IN (1,2,3,4,5) AND date_last < NOW() - INTERVAL reg DAY
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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