1

私は私のテーブルにこのレコードを持っています:

id   |   title     |  sub
-----+-------------+------
1    | Parent 1    | 0
2    | Parent 2    | 0
3    | Sub 1-1     | 1
4    | Parent 3    | 0
5    | Sub 1-2     | 1
6    | Sub 2-1     | 2
7    | Parent 4    | 0

次に、次のような1つのクエリを使用して、テーブルからこのレコードを選択します。

id   |   title     |  sub
-----+-------------+------
1    | Parent 1    | 0
3    | Sub 1-1     | 1
5    | Sub 1-2     | 1
2    | Parent 2    | 0
6    | Sub 2-1     | 2
4    | Parent 3    | 0
7    | Parent 4    | 0

レコードを親、次に子で並べ替えたいです。

mySQLでこれを行うにはどうすればよいですか?

アップデート:

私はこのクエリを使用します:

SELECT a.*, 
       CASE WHEN SUB = 0 THEN ID ELSE SUB END expression
  FROM category a
 ORDER BY CASE WHEN SUB = 0 THEN ID ELSE SUB END, ID

そして私のデータは:

id  | title     | sub 
----+---------------+-------
1   | Parent 1  | 0
2   | Parent 2  | 0
3   | Sub 1-1   | 7
4   | Parent 3  | 0
5   | Sub 1-2   | 4
6   | Sub 2-1   | 2
7   | Parent 4  | 0

結果は次のとおりです。

id  | title     | sub   | expression
----+-----------+-------+-----------
1   | Parent 1  | 0     | 1
2   | Parent 2  | 0     | 2
6   | Sub 2-1   | 2     | 2
4   | Parent 3  | 0     | 4
5   | Sub 1-2   | 4     | 4
3   | Sub 1-1   | 7     | 7
7   | Parent 4  | 0     | 7
4

2 に答える 2

1

レベルが1つを超えない場合は、CASEorderby句で式を作成できます。

SELECT a.*, 
       CASE WHEN SUB = 0 THEN ID ELSE SUB END expression
  FROM test a
 ORDER BY CASE WHEN SUB = 0 THEN ID ELSE SUB END, SUB, TITLE

この式では、常にparentIdで並べ替えられます。これは、SUB入力されている場合はID列、子でない場合は列です。

結果は次のようになります。

ID  TITLE        SUB   EXPRESSION
1   Parent 1       0          1
3   Sub 1-1        1          1
5   Sub 1-2        1          1
2   Parent 2       0          2
6   Sub 2-1        2          2
4   Parent 3       0          4
7   Parent 4       0          7

子のいずれかが別のレコードの親になる可能性がある場合でも失敗します(たとえば、サブ1-2-1)。

于 2013-01-28T11:17:01.940 に答える
0

これを試して

   SELECT * ,replace(replace(title,'Parent',''),'Sub','') as nums  
   FROM Table1
    order by nums

SQLFIDDLEデモはこちら

結果になります

   ID   TITLE      SUB   NUMS
   1    Parent 1    0     1
   3    Sub 1-1     1     1-1
   5    Sub 1-2     1     1-2
   2    Parent 2    0     2
   6    Sub 2-1     2     2-1
   4    Parent 3    0     3
   7    Parent 4    0     4

編集。

あなたの質問からのあなたの異なる結果の願いのために。これを試して

SELECT * ,replace(title,'Item','') as nums  
FROM category
order by nums

デモSQLFIDDLE

Obs:Itemそれが数字から分離されていることを確認してください。

于 2013-01-28T11:59:51.317 に答える