我有一张桌子,里面有产品。
该表有一个companyId字段。
让我们这样描述它:
id --- companyId
1 | 2
2 | 3
3 | 4
4 | 2
5 | 3
6 | 1
7 | 4
我想选择按company id排序但公司id循环的所有记录,如下所示:
id --- companyId
6 | 1
1 | 2
2 | 3
3 | 4
4 | 2
5 | 3
7 | 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
See Demo
说明:
首先根据
companyId
对数据进行排序,以便使相同的公司id粘在一起。现在沿着这个排序的结果走一走,并在每次看到相同的
companyId
时指定一个顺序递增的行号,否则将1
指定为row number
。现在命名这个排序的结果(带有行号)
t
。最后根据升序行号和升序对这些数据(
t
)进行排序。关于mysql - MySQL从表循环中按字段选择记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39685966/