MySQL Order By备用值

时间:2013-09-18 01:34:07

标签: mysql sql

我在MySQL查询Order By中遇到了麻烦。

首先,我有一个包含10000多条记录的表(tbl_records)。此表包含一个名为 rec_id 的主键和一个外键 rec_f_id

rec_f_id 只有两种值(555,666)。

现在我的问题是如何在桌面上收集以 rec_f_id 的替代值排序的记录。

例如

下面是一个虚拟的tbl记录

 | rec_id   |   rec_f_id |
 |2         |666         |
 |3         |555         |
 |7         |555         |
 |8         |666         |
 |9         |555         |
 |12        |666         |
 |25        |555         |
 |31        |555         |
 |84        |666         |
 |89        |555         |
 |91        |555         |
 |92        |666         |
 |113       |666         |
 |118       |666         |
 |125       |555         |
 |132       |555         |
 |170       |555         |
 |184       |666         |


 SELECT * FROM tbl_records ORDER BY FIELD(rec_f_id, 555, 666) LIMIT 100;

上述查询仅返回rec_f_id = 555的记录。 我想要的是

 | rec_id   |   rec_f_id |
 |31        |555         |
 |12        |666         |
 |3         |555         |
 |8         |666         |
 |25        |555         |
 |2         |666         |
 |7         |555         |
 |84        |666         |
 |9         |555         |

 ...

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试:

SELECT * FROM tbl_records
WHERE rec_f_id in (555,666) 
ORDER BY rec_id, rec_f_id,
LIMIT 100;

答案 1 :(得分:0)

这是使用user-defined variables的一个选项。基本上它会为每个组创建一个Row Number,然后通过它和rec_f_id字段进行排序:

SELECT rec_id, rec_f_id
FROM (
  SELECT rec_id, rec_f_id,
    @rn:=IF(@prev=rec_f_id,@rn+1,1) rn,
    @prev:=rec_f_id
  FROM tbl_records
    JOIN (SELECT @rn:=0, @prev:=0) t
  ORDER BY rec_f_id
  ) t
ORDER BY rn, rec_f_id