SQL сначала показывает результаты для столбца A, а затем показывает результаты для столбца B - PullRequest
2 голосов
/ 05 марта 2019

Я хочу, чтобы SQL сначала показывал / упорядочивал результаты для столбца name, а затем показывал результаты для последнего столбца description.

Текущий запрос SQL:

SELECT * FROM products WHERE (name LIKE '%$search_query%' OR description LIKE '%$search_query%') 

Я пытался добавить order by name, description [ASC|DESC] в конце, но это не сработало.

Это для оптимизации результатов поиска. Если определенное слово найдено в description, оно должно идти последним, если определенное слово также найдено в столбце name.

Ответы [ 3 ]

3 голосов
/ 05 марта 2019

Вы можете использовать оператор CASE в ORDER BY для определения приоритета name .В приведенном ниже примере все результаты, в которых сопоставляется имя, будут на первом месте, потому что оператор CASE будет иметь значение 1, тогда как все остальные результаты будут иметь значение 2.

По описанию вашей проблемы я не уверен, что именно выхотите, чтобы поведение было таким, но вы, безусловно, можете использовать эту технику для создания более изощренных случаев, чтобы расставить приоритеты для ваших результатов.

SELECT * 
FROM products 
WHERE (name LIKE '%$search_query%' OR description LIKE '%$search_query%') 
ORDER BY CASE WHEN name LIKE '%$search_query%' THEN 1 ELSE 2 END
0 голосов
/ 05 марта 2019

Хотя это недокументировано, когда наборы результатов объединяются в UNION ALL и впоследствии не сортируются, они остаются в порядке возврата, поскольку UNION ALL просто добавляет новые результаты в конец набора результатов. Это должно работать для вас:

SELECT * FROM products
WHERE name LIKE '%$search_query%' 
UNION ALL
SELECT * FROM products
WHERE (description LIKE '%$search_query%' AND name NOT LIKE '%$search_query%') 
0 голосов
/ 05 марта 2019

Если вы хотите сначала получить имена, простейшим order by будет:

order by (name like '%$search_query%') desc

MySQL обрабатывает логические значения как числа в числовом контексте, с «1» для true и «0» для false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...