我有三個表:有沒有比多個JOINS(MySQL)更有效的方法?
USER: user_id (pk); username
FIELD: field_id (pk); name
METADATA: 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用戶的元數據字段,但你的想法是什麼如何做到這一點看看是否有一打田地。
是否有另一種更好的方法來編寫此查詢?隨着用戶和元數據字段的增長,我擔心此查詢的性能。
編輯: 我想在返回的結果中每行有一個用戶。
這會工作是的,但理想情況下,我想每個用戶返回一行。 – Bart 2009-10-14 17:15:27
PHP/MYSQL是服務器代碼/ db – Bart 2009-10-14 17:18:57
Bart以這種方式返回它們可能會更快,然後讓應用程序轉換它們。您也不再需要動態構建查詢。您也不需要事先發送代碼來確定將多少個自定義字段添加到動態查詢中。 – HLGEM 2009-10-14 17:20:21