如何支持实体的自定义字段并将其列为列?

时间:2016-04-21 17:41:30

标签: php mysql sql query-optimization

我目前正在开发一个支持"自定义字段"对于用户。

我将用这个数据库模式的简化示例来说明这一点:

users
--------
user_id
name
age

custom_fields
----------------
custom_field_id 
custom_field_name

user_has_custom_field_value
------------------------
user_id (FK to users table)
custom_field_id (FK to custom_fields table)
custom_field_value (column that contains value of custom field)

此架构支持创建自定义字段,以根据客户的意愿存储信息。

但是,我想在查询输出中列出所有用户及其自定义字段(或使用一些PHP逻辑)

|  user_id    |    name     |    age    |    fav_sport    |    payment_mode   |    bank 
----------------------------------------------------------------------------------
     3              John         28          Football           SWIFT             Chase
     6              Jane         24          Swimming           Cash               BOA      

fav_sport,payment_mode和bank是自定义字段,在custom_fields表格中表示为3行。

因此,custom_fields表如下所示:

custom_field_id     |      custom_field_name 
-----------------------------------------------
       1                     fav_sport
       2                     payment_mode
       3                     bank

,user_has_custom_field值如下所示:

user_id    |        custom_field_id     |       custom_field_value     
----------------------------------------------------------------------
   1                       1                          Football
   1                       2                           SWIFT
   1                       3                           Chase
   2                       1                          Swimming
   2                       2                           Cash
   2                       3                           BOA

使用最少的查询并且不对数据库征税会以最佳方式实现此目的是什么?

我能想到的唯一解决方案是在PHP中的for循环中使用查询来获取自定义字段(肯定会很重)。有什么更有效的解决方案呢?

建议欢迎基于MySQL,基于PHP,存储过程等。

0 个答案:

没有答案