-2

次のような2つのテーブルを持つデータベースがあります。

カテゴリー

Name        |    Items
---------------------------------
At Home     |    3,4,8,9
At Office   |    10,3,2,1

アイテム

Name        |    id
--------------------------------
Fix Car     |    3
Mow Lawn    |    4
Garbage     |    8
Laundry     |    9
Desk Clean  |    10

カテゴリ テーブルでは、コンマで区切られた数字は ID ごとのアイテムのリストを表します。

特定のカテゴリ (「自宅」など) のすべてのアイテムを選択し、アイテム列と同じ順序で並べ替える SQL Select を実行するにはどうすればよいでしょうか。

データベースは、質問を理解しやすくするために単純化されています。

また、このタイプのアプリケーションのデータベースを整理するためのより良い方法を考えることができれば、それを知っておくとよいでしょう.

カスタマイズされた注文は、このプロジェクトにとって重要です

4

2 に答える 2

3

可能であれば、3番目のテーブルを作成してDBを正規化するか、以下の編集を見てください:-)

CATEGORIES

Name        |    id
---------------------------------
At Home     |    1
At Office   |    2


ITEMS

Name        |    id
--------------------------------
Fix Car     |    3
Mow Lawn    |    4
Garbage     |    8
Laundry     |    9
Desk Clean  |    10


LINKS

cat_id     |   item_id
--------------------------------
1          |   3
1          |   4
1          |   8
1          |   9
2          |   10
2 etc.

次に行きます:

SELECT items.name 
FROM items 
LEFT JOIN links ON items.id = links.item_id
WHERE items.cat_id = 1
ORDER BY items.id

itemseveryが multiple になる可能性があるという前提で操作していることに気付きましたcategories。1 つの項目 --> 1 つのカテゴリが必要な場合、3 番目のテーブルは必要ありません。フィールドを に追加しitems、別のテーブルをカスタムオーダー用に追加するだけです。

アイテム

Name        |    id   | cat_id |  order
-----------------------------------------
Fix Car     |    3    |   1    |   1
Mow Lawn    |    4    |   2    |   1
Kill Cat    |    9    |   1    |   2

SELECT name 
FROM items 
WHERE cat_id = 1
ORDER BY order
于 2013-02-19T02:17:03.360 に答える
0

使用するFIND_IN_SET

SELECT  a.name, b.Name itemName
FROM    categories a
        INNER JOIN items b
            ON FIND_IN_SET(b.id, a.items) > 0

パフォーマンスを向上させるために、テーブルをより適切に正規化します。これの1つの欠点は、要件を達成するのが難しいことです。..Items 列と同じ順序で並べます

于 2013-02-19T02:02:12.937 に答える