0

私は、各ユーザーが年齢、性別、趣味などの 20 を超える属性を持つ独自のプロファイルを持つ出会い系サイトを持っています。このために、すべての属性が 1 行にあるテーブル user_profile があります。

検索および一致計算の場合、属性値を varchar にするよりも int にする方がよいでしょう。しかし、名前も値ではない場合、すべての属性名を出力する方法がわかりません。

だから私は2つのテーブルを作成することを考えていました:

ユーザープロファイル
ユーザー ID | 性別 | 好きなペット | ドリンク | ボディタイプ | 目 | 髪の色 | ...
1 | 1 | 3 | 2 | 4 | 5 | 5 | ...
2 | 2 | 4 | 2 | 3 | 3 | 5 | ...
user_attributes
id | attr_group | value_name | attr_value
1  | 1          | male      | 1
2  | 1          | famale    | 2
3  | 2          | Like pets | 1
4  | 2          | Have pets | 2
5  | 2          | Don't like pets | 3
6  | 3          | Blue      | 1
7  | 3          | Gray      | 2
8  | 3          | Green     | 3
9  | 3          | Brown     | 4
... 

ただし、すべての属性のすべての値の名前を出力するには、20 個のクエリを作成する必要があります。たとえば、目の色を印刷するには、必要になります

SELECT * FROM user_attributes WHERE attr_group=3

次に、性別、および他の各属性についても同じです。

これは正しい方法ですか?

4

2 に答える 2

0

すべての属性のすべての名前が本当に必要な場合は、データベースに正確に尋ねてください。

SELECT * FROM user_attributes ORDER BY attr_group

データベースから結果を取得したら、コードでグループ化を行います。それらは便利にソートされるため、隣接する行を同じで簡単にグループ化できattr_groupます。

これを user テーブルと結合するには、別のテーブルを使用して属性を格納することを検討することをお勧めします(user_id, attr_group, attr_value)。次に、このテーブル全体を結合してuser_attributes、すべての結果を取得できます。

于 2012-04-28T09:01:35.330 に答える
0

はい、すべての許容値を含むルックアップ テーブルがあると便利です。(はい、たとえ 20 個あっても。) 他のテーブルからルックアップ テーブルへの外部キー リレーションを作成することができます。存在しません。データを表示する準備ができたら、テーブルを結合して名前を取得します。

于 2012-04-28T09:10:10.273 に答える