Entity-Attribute-Valueパターン(EAV)に従ってMySQLデータベースにデータを保存しています。具体的には、Drupal 6のユーザープロファイル値です。データを通常のリレーショナルテーブルとして取得するには、SQLクエリまたはビューが必要です。テーブルのレイアウトは次のとおりです。
Table: users
user_id username
---------------------
1 steve
2 michelle
Table: profile_fields
field_id field_name
------------------------
1 first_name
2 last_name
Table: profile_values
field_id user_id value
---------------------------
1 1 Steve
2 1 Smith
1 2 Michelle
2 2 Addams
そして、私はどういうわけかクエリから次の結果を取得する必要があります:
user_id first_name last_name
-----------------------------------
1 Steve Smith
2 Michelle Addams
一般的なケースでは、これを単一のSQLクエリで実行することは不可能であることを理解しました。しかし、これは一般的なケースではなく、2つの利点があります。
- 「profile_fields」テーブルの内容を知っており、このクエリが使用される期間中、このデータが変更されないことを100%確信しています。
- 単一のクエリに含める必要はありません。クエリ、結果を分析するためのPHPコード、そして別のクエリにすることができます。