объединение предложения WHERE и IN с двумя полями - PullRequest
1 голос
/ 12 февраля 2011

У меня есть таблица «товары» с 3 столбцами (идентификатор, имя, цена). Мне нужно получить данные по списку идентификаторов и ценовой диапазон.

Я использую этот запрос:

SELECT id, name, price FROM goods
WHERE (id, price)
IN ((1,10), (3,20), (2,10))
ORDER BY FIELD(id, 1,3,2)

Все в порядке, пока я использую строгие значения цены.

На самом деле мне нужно сделать запрос вроде:

SELECT id, name, price FROM goods
WHERE (id, price)
IN ((1, BETWEEN 0 AND 100), (2, BETWEEN 50 AND 150), (n, BETWEEN m AND k))
ORDER BY FIELD(id, 1,3,n)

Я нашел выражение (1, BETWEEN 0 AND 100) никогда не вернет нужный мне результат, в то время как (1,10) будет.

Я, конечно, могу исключить записи по ценовому диапазону в php, но я пытаюсь найти более эффективный способ сделать это в запросе mysql с использованием индексов. Что мне делать?

1 Ответ

4 голосов
/ 12 февраля 2011

Вы не можете использовать МЕЖДУ таким образом. Попробуйте вместо этого изменить выражение IN на последовательность OR:

SELECT id, name, price
FROM goods
WHERE
    (id = 1 AND price BETWEEN 0 AND 100) OR
    (id = 2 AND price BETWEEN 50 AND 150) OR
    (id = n AND price BETWEEN m AND k)
ORDER BY FIELD(id, 1,3, n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...