我在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 |
...
谢谢!
答案 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