我在这里尝试从 3 个数据库表中获取一些数据时遇到了困难。
这个想法是用户可以用几个字段填写他们的个人资料,我将每个个人资料字段、字段值和用户选择的值存储在单独的表中。
表的结构如下所示:
Table 'profile_fields'
- id
- name
- sort
- status (enum '0', '1')
Table 'profile_field_values'
- id
- profile_field_id
- name
Table 'user_profile_fields'
- user_id
- profile_field_id
- profile_field_value_id
如果你能告诉我如何构造这个查询,以及你为什么使用你所做的 JOIN,那就太好了。
此外,当用户群增长时,此表格布局将如何扩展?
非常感谢您!
编辑:好的,我仍然不知道如何让它返回'profile_fields'中的所有字段以及'user_profile_fields'中的用户选择选项。如果用户没有选择一个值,它应该只是空。
到目前为止,这是我的(非功能性)查询:
SELECT PF.id AS field_id, PF.name AS field_name, UPF.profile_field_value_id AS value_id, PF.type, PFV.name
FROM profile_fields PF
LEFT JOIN profile_fields_values PFV ON PFV.profile_field_id = PF.id
LEFT JOIN user_profile_fields UPF ON UPF.user_id=1 AND PF.id = UPF.profile_field_id
WHERE length(PF.name) > 0 and PF.status = '1'
ORDER BY PF.sort
此查询似乎有效,但它没有从“profile_field_values”中获取值的名称:
SELECT PF.id AS field_id, PF.name AS field_name, UPF.profile_field_value_id AS value_id, PF.type
FROM profile_fields PF
LEFT JOIN user_profile_fields UPF ON UPF.user_id =1
AND PF.id = UPF.profile_field_id
WHERE LENGTH( PF.name ) >0
AND PF.status = '1'
ORDER BY PF.sort