我有一个这样的表:
// mytable
+----+---------+-------------------------------+
| id | title | content |
+----+---------+-------------------------------+
| 1 | hello | how are you? |
| 2 | you | it is content2 |
| 3 | what | hello is a word for greating |
| 4 | mouse | it is content4 |
+----+---------+-------------------------------+
嗯,我想给 title
一个比 content
更高的优先级。我的意思是,我想显示 title
列(第一个)的所有结果,然后显示 content
列(第二个)的所有结果。这也是我的查询:
select * from mytable where match(title, content) against($word);
这里还有两个例子:
示例 1:
$word = 'you';
我想要这样的输出:(关注排序)
+----+---------+-------------------------------+
| id | title | content |
+----+---------+-------------------------------+
| 2 | you | it is content2 |
| 1 | hello | how are you? |
+----+---------+-------------------------------+
示例 2:
$word = 'hello';
我想要这样的输出:(关注排序)
+----+---------+-------------------------------+
| id | title | content |
+----+---------+-------------------------------+
| 1 | hello | how are you? |
| 3 | what | hello is a word for greating |
+----+---------+-------------------------------+
我再次强调,我想要所有来自 title
列的结果,然后所有来自 content
列的结果。有什么解决办法吗?
最佳答案
您需要做的就是使用 CASE 和单词匹配项进行条件排序。这是一个让你继续前进的例子
SELECT title, content
FROM tablename
ORDER BY CASE
WHEN title LIKE '%you%' THEN 1
WHEN content LIKE '%you%' THEN 2
ELSE 3
END;
关于mysql - 如何为列设置优先级并按该优先级对结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157471/