Извиняюсь за сумбурный сабж. Подскажите пожалуйста, возможно ли решить задачу средствами mysql.
Допустим есть таблица products, с полями: "id", "name", "description".
Задача в том чтобы одним запросом найти продукты в которых некая подстрока имеет вхождение в name или в description, НО в выдаче в начале должны идти продукты с вхождением в name, а в конце в description
Задача в том чтобы одним запросом найти продукты в которых некая подстрока имеет вхождение в name или в description, НО в выдаче в начале должны идти продукты с вхождением в name, а в конце в description
Какой ожидаемый средний процент попадания в каждое поле - по отдельности?
SELECT id, name, description
FROM products
ORDER BY CASE WHEN name LIKE '%string%' THEN 2 WHEN description LIKE '%string%' THEN 1 ELSE 0 END DESC, name
вот опять этот идиотский case. ЗАЧЕМ?
откройте раз в жизни клиент базы данных, наберите в нем SELECT name LIKE '%string%' и посмотрите на результат.
а потом сравните с теми значениями, которые пытаетесь получить через свой case.
и задайте себе вопрос - и зачем было городить этот огород
FanatPHP, да, действительно, без лишних кейсов смотрится красивее и лаконичнее. А если будет задача использовать более сложное условие, например, выводит данные, если искомая строка встречается в двух столбцах, затем, если есть в первом, потом - во втором и если нет вообще, такое можно как-то красиво решить без кейса?
V Sh., ну навскидку я бы использовал логические операторы.
order by первое like строка and второе like строка, первое like строка, второе like строка, name
но вообще такие задачи уже для систем полнотекстового поиска, sphinx, elastic. Там во-первых, будет на порядки быстрее, а во-вторых можно играться с релевантностью условий.
SELECT 1, * FROM products WHERE name LIKE '%что-то%'
UNION
SELECT 2, * FROM products WHERE description LIKE '%что-то%'
AND NOT name LIKE '%что-то%'
ORDER BY 1
Константин Цветков, ну уж либо UNION DISTINCT, либо UNION ALL .. AND NOT name LIKE '%что-то%'. А одновременно - это какое-то масло масляное получается...