2016-09-25 54 views
1

我有一个产品表。 该表有一个companyId字段。 让我们形容它是这样的:Mysql按字段从表循环组中选择记录

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

您有多个公司ID。它应该如何? –

回答

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数据,以便同一家公司的IDS粘在一起。

现在沿着这个排序结果散步,每次看到相同的分配顺序增加的行号companyId否则分配1row number

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

最后按照升序排列号和升序排列这些数据(tcompanyId