Mysql按字段从表循环中选择记录

时间:2016-09-25 10:45:16

标签: 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   |    2     
 2   |    3     
 3   |    4     
 4   |    2     
 5   |    3   
 7   |    4

我怎样才能实现它?

1 个答案:

答案 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

See Demo

<强>解释

首先根据companyId对数据进行排序,以便相同的公司ID粘在一起。

现在沿着这个排序结果行走,并在每次看到相同的companyId时分配一个按顺序递增的行号,否则将1指定为row number

现在将此排序结果命名为(行号)t

最后根据升序行号和升序t对这些数据(companyId)进行排序。