Как я могу выполнить запрос MySQL, используя массив в качестве входных данных вместо одного значения?

#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 для ознакомления с тем, почему индексы имеют значение и как их использовать.