我有一個鬥爭在這裏試圖抓住從3數據庫表中的一些數據獲取數據..從3個MySQL表
的想法是,用戶可以填寫自己的個人資料與幾個領域,我存儲每個配置文件字段,字段值和用戶在單獨的表中選擇值。
表的結構是這樣的:
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
將是非常好的,如果你能告訴我如何構造這個查詢,以及爲什麼你用你一起做。
另外,當用戶基數增長時,這個表格佈局如何擴展?
非常感謝你提前!
編輯: 好的,我仍然無法弄清楚如何使它從'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
'我在這裏掙扎試圖從3個數據庫表中獲取一些數據.'而你在掙扎時嘗試了什麼,用你的一些代碼更新你的問題。 – Prix
注意,使用ENUM中的數字時要小心。確保您的enum查詢正確引用。 – James
@詹姆斯,是的,我發現了這一點。起初,我收到一個錯誤,因爲沒有引用該值。謝謝:-) – user1169875