- PVSM.RU - https://www.pvsm.ru -
SQL-подобный язык SphinxQL пока не поддерживает условие «OR» в выражении «WHERE». То есть при запросе к поисковому индексу нельзя написать нечто вроде
SELECT * FROM `goods_index` WHERE `price` > 100 OR `price` = 0;
выбрать из индекса все товары, с ценой большее 100 тугриков или если цена не указана
Но выходы, конечно, есть: использовать вычисления. Перепишем запрос для придуманного мною примера в таком виде:
SELECT *, IF(`price` > 100, 1, 0) + IF(`price` = 0, 1, 0) AS `pricematch` FROM `goods_index` WHERE `pricematch` = 1;
Фокус в том, что pricematch
всегда будет равен единице, если цена выше 100 или равна нулю и для проверки соответствия записи достаточно проверить равенство pricematch
единице.
Используя такие вычисления в запросах SphinxQL и традиционного SQL, можно выйти из положения в других ситуациях, когда в запросе необходимо условие «или».
Автор: ChemAli
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sql/44702
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/195918/
Нажмите здесь для печати.