我正在尝试在我的一个应用程序中对“搜索”进行 MySQL 查询。这是我目前拥有的:
(SELECT id, title, 1 AS `order`
FROM tasks
WHERE title LIKE '%Task%Test%')
UNION DISTINCT
(SELECT id, title, 2 AS `order`
FROM tasks
WHERE title LIKE '%Task%' AND title LIKE '%Test%')
ORDER BY `order` ASC;
第二个查询UNION
作为第一个查询的后备,因为第一个查询期望单词的顺序相同。(字数是动态的,取决于搜索查询。)
在结果中,我想先显示第一个查询的结果,因为那些更精确。为此,我尝试在结果中添加一个额外的列:order
.
我的问题是DISTINCT
仅适用于完全相同的行,而我的行则不是这种情况,因为orders
列。
例子
桌子:
id title
1 'Test Task'
2 'The Second Test Task'
3 'A Third Task For Testing'
4 'A Fourth Test'
结果:
id title order
3 'A Third Task For Testing' 1
1 'Test Task' 2
2 'The Second Test Task' 2
3 'A Third Task For Testing' 2
我想要的是:
id title order
3 'A Third Task For Testing' 1
1 'Test Task' 2
2 'The Second Test Task' 2
谁能帮助我?
提前致谢!
我认为您可以在不使用联合的情况下从单个查询中获得相同的结果:
SELECT
id, title,
CASE WHEN title LIKE '%Task%Test%' THEN 1
WHEN title LIKE '%Task%' AND title LIKE '%Test%' THEN 2
ELSE 3
END AS label
FROM tasks
WHERE
title LIKE '%Task%Test%' OR
(title LIKE '%Task%' AND title LIKE '%Test%')
ORDER BY label;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句