2

基本的に次のようなスキーマがあります。

CREATE TABLE `data` (
  `id` int(10) unsigned NOT NULL,
  `title` text,
  `type` tinyint(4),
  `parent` int(10)
)

フィールドは単なる列挙型であり、type1は親タイプ、2は子タイプです(実際には多くのタイプがあり、親のように動作するタイプと子のように動作するタイプがあります)。このparentフィールドは、レコードが別のレコードの子であることを示しています。

これは、作成したいクエリにはおそらく理想的ではないことはわかっていますが、これを使用する必要があります。

親レコードが。で並べ替えられるようにデータを並べ替えてtitleグループ化し、各親の下にグループ化されるのは、で並べ替えられた子レコードtitleです。そのようです:

 ID | title       |type |parent 
--------------------------------
 4  | ParentA     | 1   |
 2  | ChildA      | 2   | 4
 5  | ChildB      | 2   | 4
 7  | ParentB     | 1   |
 9  | ChildC      | 2   | 7
 1  | ChildD      | 2   | 7

**編集**

type私たちは、フィールドを完全に写真から取り除くことができるはずです。nullでない場合parentは、親の下にグループ化する必要があります。

4

3 に答える 3

2
SELECT * FROM `data` ORDER BY COALESCE(`parent`, `id`), `parent`, `id`
于 2012-04-03T20:34:18.797 に答える
0

これは、SQL Server で動作することがテストされたソリューションです。MySQLでも本質的に同じはずです

select Id, Title, [Type], Id as OrderId from Hier h1 where [Type] = 1
union
select Id, Title, [Type], Parent as OrderId from Hier h2 where [Type] = 2
order by OrderId, [Type]
于 2012-04-03T20:31:04.790 に答える
0

タイトルで並べ替えたいとおっしゃいましたよね?

SELECT id, title, parent
FROM
  ( SELECT id, title, parent,
    CASE WHEN parent is null THEN title ELSE CONCAT((SELECT title FROM `data` d2 WHERE d2.id = d.parent), '.', d.title) END AS sortkey
    FROM `data` d
   ) subtable
ORDER BY sortkey

編集:typeクエリから削除するために編集されました。

于 2012-04-03T20:39:56.237 に答える