PHP / MySQL: полнотекстовый поиск с использованием MATCH () AGAINST () и ORDER BY?

Пожалуйста, не могли бы кто-нибудь помочь мне выполнить мою миссию по поиску в базе данных (которая имеет 2 столбца полнотекстового индекса), используя несколько слов и упорядочивая по цене DESC.

Этот запрос действительно работает (поиск по ключевым словам, введенным пользователем, создает оценку на основе того, сколько слов было найдено), но ORDER BY price DESC кажется немного странным. Пример

SELECT *, MATCH(title,description) AGAINST('nissan ford astra golf' IN BOOLEAN MODE) AS relevance FROM listings WHERE MATCH(title,description) AGAINST('nissan ford astra golf' IN BOOLEAN MODE) ORDER BY price DESC;

Ford Escort | Used | £100 
Vauxhall Astra | New | £2000 
VW Golf | Used | £500 
Nissan Micra | Used | £2000 

Я хотел бы установить приоритет столбца цен ORDER BY DESC или ASC.

На это ушло почти 5 лет, так что, надеюсь, какой-нибудь знающий парень поможет мне завершить эту миссию.

Спасибо заранее. Эндрю.


person Andrew Smith    schedule 26.09.2015    source источник
comment
Похоже, ваш order by даже не выполняется. Независимо от ключей, два значения £2000 должны быть рядом друг с другом. Могут ли цены в некоторых случаях храниться в виде строк с пробелами в начале?   -  person Gordon Linoff    schedule 26.09.2015


Ответы (1)


Я подозреваю, что цена хранится в виде строки, а не числа. Вот одно решение, если у вас нет десятичных знаков:

order by length(price) desc, price desc

В качестве альтернативы преобразование в число:

order by substr(price, 2) + 0
person Gordon Linoff    schedule 26.09.2015
comment
Спасибо, Гордон, я потратил лучшую часть из 5 лет, пытаясь заставить поиск работать, оставил множество вопросов на разных веб-сайтах, и вы сказали мне через 10 минут ... Твой бриллиант ... Я не могу объяснить, насколько я велик. Огромное спасибо... - person Andrew Smith; 26.09.2015