2016-07-09 43 views
1

可以说我有如下表:Mysql的重复顺序

| name | category | 
---------------------- 
| Apple | fruit  | 
| Banana | fruit  | 
| Orange | fruit  | 
| Pear | fruit  | 
| Tomato | vegetable | 
| Pepper | vegetable | 
| Walnut | nut  | 
| Cashew | nut  | 

如何获得结果散货订单从类别只有一行,但随后,其余重复像这样:水果,蔬菜,坚果,水果,蔬菜,坚果,水果,蔬菜......等等。我想实现这样的结果:

| name | category | 
--------------------- 
| Apple | fruit  | ─┐ 
| Tomato | vegetable | ─├ Bulk 1 
| Walnut | nut  | ─┘ 
| Banana | fruit  | ─┐ 
| Pepper | vegetable | ─├ Bulk 2 
| Cashew | nut  | ─┘ 
| Orange | fruit  | ── Bulk 3 
| Pear | fruit  | ── Bulk 4 

每次我的查询会有所不同,但我想有结果相同的排序。批量不必包含所有类别(例如批量3 & 4只包含一行)。

这可以通过单个查询/ PDO事务来实现吗?

+1

您对它们进行排名,然后按模数排序 – Strawberry

回答

2

这是你的MySQL查询:

SELECT name,category FROM (
    SELECT id, 
        name, 
        category, 
       ( 
        CASE category 
        WHEN @curCategory 
        THEN @curRow := @curRow + 1 
        ELSE @curRow := 1 AND @curCategory := category END 
       ) + 1 AS rank 
     FROM  plants p, 
        (SELECT @curRow := 0, @curCategory := '') r 
     ORDER BY rank,category 
) as pl 

来写我用this。外部选择仅用于选择两列名称和类别。主要思想是在内部选择内部创建“等级”列的女巫每个类别编写分隔符。然后我们按排名排序(内部排名按类别排序)。没有(和带)只运行内部选择,那么你会明白我的意思。