Реализация условия «ИЛИ» в SphinxQL

от автора

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, можно выйти из положения в других ситуациях, когда в запросе необходимо условие «или».

ссылка на оригинал статьи http://habrahabr.ru/post/195918/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *