Mysql按字段从表循环中选择记录
我有一张摆放商品的桌子。 该表有一个companyId字段。 让我们这样描述它:Mysql按字段从表循环中选择记录,mysql,sql,Mysql,Sql,我有一张摆放商品的桌子。 该表有一个companyId字段。 让我们这样描述它: id --- companyId 1 | 2 2 | 3 3 | 4 4 | 2 5 | 3 6 | 1 7 | 4 我想选择所有按companyId排序但公司id循环的记录,如下所示: id --- companyId 6 | 1 1 |
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
如何实现它?您可以使用
MySQL用户定义变量实现这一点
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
分配为行号
现在将这个排序结果命名为(行号)t
最后,根据升序行号和升序公司ID对这些数据进行排序(
t
),您可以使用MySQL用户定义变量来实现这一点
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
分配为行号
现在将这个排序结果命名为(行号)t
最后,根据升序行号和升序公司id对这些数据(t
)进行排序。您有多个公司id。应该是什么样的?您有多个公司id。应该是什么样的?