Mysql重复顺序

时间:2016-07-09 18:08:48

标签: mysql pdo

假设我有下表:

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

答案 0 :(得分: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。外部选择仅用于选择两列名称和类别。主要思想是在内部选择内部创建“等级”列,每个类别都有一个分类。然后我们按等级排序(内部等级按类别排序)。只运行内部选择而没有(和)order by然后你会看到我的意思。