我有一张这样的表:
// tablename
+----+---------+-----------------------+
| id | subject | context |
+----+---------+-----------------------+
| 1 | ali | hello |
| 2 | peter | what's up jack |
| 3 | jack | have fun |
+----+---------+-----------------------+
subject
的类型为varchar
,context
为text
。
现在,我需要在两列subject
和context
中进行搜索查询。所以我有一个像这样的索引: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
来实现这样的东西?
答案 0 :(得分:0)
你可以
ORDER BY subject
按主题排序。
如果您想要自定义排序,您可以执行以下操作:
ORDER BY CASE WHEN subject = 'Jack' THEN 1
WHEN subject = 'Ali' THEN 2
ELSE 3 END, subject
这将始终将杰克置于顶部,然后是阿里,其余的将按主题排序。
对于您的方案,只需更改一下:
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
答案 1 :(得分:0)
有趣。 我刚刚在Oracle中尝试了以下查询。我可以通过指定排序顺序通过asc或desc进行排序。我认为同样可以在mysql中实现,也可以由han
建议SELECT * FROM employees where subject like '%jack%' or context like '%jack%'
ORDER BY CASE WHEN subject like '%jack%' THEN 1
ELSE 2 END, subject;