mySQL自定义排序顺序ORDER BY FIELD()问题

时间:2013-11-28 17:12:05

标签: php mysql

我正在尝试使用自定义顺序对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然后在主查询中使用。有没有更快的方法在一个语句中写这个?

3 个答案:

答案 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。这由此零点命令。