1

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コード、そして別のクエリにすることができます。
4

1 に答える 1

2

これは、次のように列型サブクエリを使用してSQLクエリで実行できます。

SELECT 
  u.user_id, 
  (select value from profile_values f1 WHERE f1.field_id=1 and u.user_id=f1.user_id) AS first_name, 
  (select value from profile_values f2 WHERE f2.field_id=2 and u.user_id=f2.user_id) AS last_name
  FROM users u 
于 2012-04-20T01:40:16.807 に答える