0

私は動的なユーザー情報を持っているシステムを持っています。基本的に、ID、名前、電子メール、およびパスワード(必要な基本)を含むユーザーテーブルがあります。また、システム管理者がユーザーフィールドを追加する場合は、user_fieldsテーブルに新しいエントリを追加することで追加できます。この場合、そのフィールドのデータはuser_fields_dataに格納されます。

ユーザー:

id | name      | email         | password
=============================================
1  | bob smith | bob@gmail.com | asdfasdfasdf
...

user_fields:

id | field
==========
1  | address_1
2  | address_2
...

user_fields_data:

user_id | field_id | value
===============================
1       | 1        | 123 abc st
1       | 2        | suite 314

基本的に私の目標は、すべての情報を取得できる単一のクエリを実行することです。

array(
    'name'      => 'bob',
    'email'     => 'bob@gmail.com',
    'password'  => 'asdfasdfasdf',
    'address_1' => '123 abc st',
    'address_2' => 'suite 314'
)

私は一日中テーブルを結合しますが、この方法(行/列)でテーブルを結合する必要はありませんでした。

前もって感謝します!

4

2 に答える 2

3
select 'name' as name, name as value from user where id = 1
union all
select 'email', email from user where id = 1
union all
select 'password', password from user where id = 1
union all
select uf.field, ufd.value
from user_fields_data ufd 
inner join user_fields uf on ufd.field_id = uf.id
where ufd.user_id = 1

SQL フィドルの例

出力:

|      NAME |         VALUE |
-----------------------------
|      name |     bob smith |
|     email | bob@gmail.com |
|  password |  asdfasdfasdf |
| address_1 |    123 abc st |
| address_2 |     suite 314 |
于 2012-09-05T19:03:13.847 に答える
0

結合するカスタム フィールドがわかっている場合は、この例のように、メタ テーブルから複数のエントリを使用して Compex MySQL Left Join を実行できます。

于 2012-09-05T19:00:20.073 に答える