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