1

我根据实体-属性-值模式 (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 查询中这是不可能做到的。但这不是一般情况,我有两个优点:

  • 我知道“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 回答