2016-07-09 4 views
1

は、私は、次の表を持っていると言うことができます果物、野菜、ナッツ、果物、野菜、ナッツ、果物、野菜...など。私はこの結果を達成したい:MySQLの繰り返し順序

| 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は1行のみを含みます)。

これは、単一のクエリ/ 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を使用し、それを書くために。外側の選択は、2つの列の名前とカテゴリを選択する場合にのみ行われます。主なアイデアは内側の選択であり、「ランク」列の魔法を作り出すことで各カテゴリーが分離されます。そして、私たちはランクで分類します(そして内部のランクはカテゴリー別にソートします)。実行しないでのみ内部の選択order byあなたは私の意味を参照してください。

関連する問題