1

我在 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         |

 ...

谢谢!

4

2 回答 2

1

这是使用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
于 2013-09-18T01:58:49.473 回答
-1

尝试:

SELECT * FROM tbl_records
WHERE rec_f_id in (555,666) 
ORDER BY rec_id, rec_f_id,
LIMIT 100;
于 2013-09-18T01:37:45.923 回答