#mysql #sql
Вопрос:
У меня есть список таких ценностей:
[1000, 1100, 1200]
Я хочу выполнить запрос MySQL, который найдет все записи в моей базе данных, где определенный столбец находится в пределах допустимого значения (скажем, / — 1) каждого из этих значений, например:
SELECT *
FROM test_table
WHERE mz1_shifted
BETWEEN (1000 - 1) AND (1000 1)
Нужно ли мне выполнять несколько запросов, или я могу вместо этого каким-то образом передать массив:
....
BETWEEN ([1000, 1100, 1200] - 1) AND ([1000, 1100, 1200] 1) #pseudocode
Комментарии:
1. Вы можете просто добавить разные
BETWEEN
предложения для каждого диапазона и связать их вместеOR
.WHERE (mz1_shifted BETWEEN (1000-1) AND (1000 1)) OR (mz1_shifted BETWEEN (1100 - 1) AND (1100 1))
.
Ответ №1:
Вы бы ИЛИ ваши условия вместе.
SELECT *
FROM test_table
WHERE
mz1_shifted BETWEEN (1000 - 1) AND (1000 1)
OR
mz1_shifted BETWEEN (1100 - 1) AND (1100 1)
OR
mz1_shifted BETWEEN (1200 - 1) AND (1200 1)
Комментарии:
1. Спасибо-это самый эффективный способ? Я создам конструктор запросов на PHP для добавления предложений » ИЛИ…», если это так. Я подумал, что, возможно, в MySQL будет встроенный способ работы со списками входных данных.
2. Что вы подразумеваете под «эффективным»? Эффективно с точки зрения написания кода? Эффективно означает, что он работает быстро?
3. Эффективно с точки зрения минимального времени выполнения :-).. это будет выполняться в таблицах с сотнями миллионов записей
4. Если вы хотите, чтобы он работал быстро, вам нужны индексы для столбцов в предложении WHERE. Видишь use-the-index-luke.com для ознакомления с тем, почему индексы имеют значение и как их использовать.