2016-09-25 84 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