我有一张产品表。 该表有一个companyId字段。 让我们这样描述:
id --- companyId
1 | 2
2 | 3
3 | 4
4 | 2
5 | 3
6 | 1
7 | 4
我想选择companyId订购的所有记录,但公司ID循环,如下:
id --- companyId
6 | 1
1 | 2
2 | 3
3 | 4
4 | 2
5 | 3
7 | 4
我怎样才能实现它?
答案 0 :(得分:4)
您可以使用MySQL user defined variables
SELECT
t.id,
t.companyId
FROM
(
SELECT
*,
IF(@sameCompany = companyId , @rn := @rn + 1,
IF(@sameCompany := companyId, @rn := 1,@rn := 1)
) AS rn
FROM companytable
CROSS JOIN (SELECT @sameCompany := -1, @rn := 1) AS var
ORDER BY companyId
) AS t
ORDER BY t.rn , t.companyId
<强>解释强>
首先根据companyId
对数据进行排序,以便相同的公司ID粘在一起。
现在沿着这个排序结果行走,并在每次看到相同的companyId
时分配一个按顺序递增的行号,否则将1
指定为row number
。
现在将此排序结果命名为(行号)t
。
最后根据升序行号和升序t
对这些数据(companyId
)进行排序。