gpt4 book ai didi

mysql - 如何定义每列的优先级,然后按该优先级显示结果顺序?

转载 作者:行者123 更新时间:2023-11-29 21:57:16 24 4
gpt4 key购买 nike

我有一个这样的表:

// tablename
+----+---------+-----------------------+
| id | subject | context |
+----+---------+-----------------------+
| 1 | ali | hello |
| 2 | peter | what's up jack |
| 3 | jack | have fun |
+----+---------+-----------------------+

subject类型varcharcontexttext

现在我需要在两列中进行搜索查询,即主题上下文。所以我有一个像这样的索引: fulltext(subject,context) 这是我的查询:

SELECT * FROM tablename WHERE MATCH (subject,context) AGAINST ($var) limit 10;

现在我的问题是关于结果的排序:(假设$var = 'jack'),所以有两个结果(id=2(在 context 列中)、id=3(在 subject 列中)。现在,首先,我想显示 subject 列的所有结果,然后显示 context 列的结果。换句话说,我想要这个输出:

+----+---------+-----------------------+
| 3 | jack | have fun |
| 2 | peter | what's up jack |
+----+---------+-----------------------+

那么我如何在我的sql中使用order by来实现这样的事情呢?

最佳答案

你可以

ORDER BY subject 

按主题排序。

如果您想要自定义排序,您可以执行以下操作:

ORDER BY CASE WHEN subject = 'Jack' THEN 1
WHEN subject = 'Ali' THEN 2
ELSE 3 END, subject

这将始终将 Jack 置于顶部,然后是 Ali,然后其余部分将按主题排序。

针对您的场景,只需稍微更改一下即可:

ORDER BY CASE WHEN subject = $var THEN 1
WHEN context = $var THEN 2
ELSE 3 END, subject

您可能需要使用 CHARINDEX 来查找变量:

ORDER BY CASE WHEN CHARINDEX ($var, subject) > 0 THEN 1
WHEN CHARINDEX ($var, context) > 0 THEN 2
ELSE 3 END, subject

关于mysql - 如何定义每列的优先级,然后按该优先级显示结果顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com