0

ユーザーに関するデータを格納するユーザー テーブルがあります。私が保存する必要があるものの 1 つは、ユーザーが使用するすべてのウィジェット メーカーに関するものだとしましょう。これらの各メーカーに関するデータを (メーカー テーブルから) 取得して、ユーザーに提示する必要があります。ユーザー テーブルでは、ユーザーの製造元を以下のような列に複数の値として保存し、それを分割してクエリを作成する必要がありますか?

ユーザー

id  | username  | password | widget_man_id | etc
1   | bob       | ****     | 1,4,3         | some data
2   | don       | *****    | 2,3,1         | some more data
.
.

または、使用しているメーカーに関するすべてのユーザー情報を保持する新しいテーブルを作成する必要がありますか? そのようです...

user_man

id  | manufacturer  |  user  |  order
1   | 1             |  1     |  1
2   | 4             |  1     |  2
3   | 3             |  1     |  3 
4   | 2             |  2     |  1
5   | 3             |  2     |  2
6   | 1             |  2     |  3
.
.

次に、特定のユーザーに対してこのようなクエリを実行します...

select manufacturer, order from user_man where user=1

**また、順序フィールドに基づいて結果を降順に並べ替えるにはどうすればよいですか?

4

4 に答える 4

5

複数の値を 1 つの列に入れて分割しないでください。これは、各値にインデックスを付けることができないため、クエリの実行速度が大幅に低下します。それぞれに個別のレコードを持つテーブルを用意する方がはるかに優れています。このテーブルにインデックスを付けると、クエリがはるかに高速に実行されます。

于 2013-02-14T14:52:43.963 に答える
1

別のテーブルが唯一の方法です。

結果を降順に並べ替えるには、DESCキーワードを追加するだけです

SELECT manufacturer FROM user_man WHERE user=1 ORDER BY `order` DESC
于 2013-02-14T14:54:54.773 に答える
1

一般的なアプローチは、テーブル ユーザーを使用することです (あなたのものと同様ですが、widget_man_id はありません)。

ユーザー

id  | username  | password | etc
1   | bob       | ****     | some data
2   | don       | *****    | some more data

メーカー表:

メーカー

id  | name  | etc
1   | man1  | some data
2   | man2  | some more data

そして、多対多の関係テーブル(あなたの例のように):

user_man

id  | manufacturer  |  user  |  order
1   | 1             |  1     |  1
2   | 4             |  1     |  2
3   | 3             |  1     |  3 
4   | 2             |  2     |  1
5   | 3             |  2     |  2
6   | 1             |  2     |  3
于 2013-02-14T15:08:48.363 に答える