【发布时间】:2009-10-14 17:02:41
【问题描述】:
我有三张桌子:
USER: user_id (pk); usernameFIELD: field_id (pk); nameMETADATA: metadata_id (pk); field_id (indx); user_id (indx); value
这样做的原因是应用程序允许为每个用户创建自定义字段。为了显示用户的所有信息,我正在构建一个动态查询(通过 PHP),最终看起来像这样:
SELECT
u.username, m1.value AS m1value, m2.value AS m2value
FROM user AS u
LEFT JOIN metadata AS m1
ON (u.user_id=m1.user_id AND m1.field_id=1)
LEFT JOIN metadata AS m2
ON (u.user_id=m2.user_id AND m2.field_id=2)
此示例只有 2 个用户元数据字段,但您会知道如果有十几个字段会是什么样子。
还有其他更好的方法来编写这个查询吗?随着用户和元数据字段的增长,我担心此查询的性能。
编辑: 我希望在返回的结果中每行有一个用户。
【问题讨论】:
标签: sql mysql query-optimization