我正在尝试使用自定义顺序对SELECT
语句的结果进行排序:
SELECT * FROM table ORDER BY FIELD(id,4,5,6) LIMIT 6
我原本希望返回包含ID的行:4,5,6,1,2,3
但我得到1,2,3,7,8,9
。我做错了什么?
作为旁注:在运行此查询之前,我正在使用具有SELECT
函数的其他GROUP_CONCAT
从数据库中提取此排序顺序,如下所示:
SELECT group_concat(clickID ORDER BY count DESC separator ',') from table2 WHERE searchphrase='$searchphrase'
这导致4,5,6
然后在主查询中使用。有没有更快的方法在一个语句中写这个?
答案 0 :(得分:3)
以这种方式试试
SELECT *
FROM table1
ORDER BY FIELD(id, 4,5,6) > 0 DESC, id
LIMIT 6
输出:
| ID | |----| | 4 | | 5 | | 6 | | 1 | | 2 | | 3 |
这是 SQLFiddle 演示
答案 1 :(得分:1)
不需要FIELD
功能。这只会让事情变得缓慢。
您只需要正确使用ORDER BY
:
SELECT * FROM table
ORDER BY id IN (4,5,6) DESC, id
LIMIT 6
答案 2 :(得分:1)
这是如何在一个查询中完成所有操作
SELECT DISTINCT t1.*
FROM table t1
LEFT JOIN table2 ON t1.id = t2.clickID AND t2.searchphrase='$searchphrase'
ORDER BY t2.clickID IS NULL ASC, t1.id ASC
当LEFT JOIN
找不到匹配项时,它会在返回的行中将t2
中的字段设置为NULL。这由此零点命令。