tUsers: userid (contains user info) tPrefs: prefid, prefname (contains preference definitions) tPrefVals: userid, prefid, value (contains preference values)
首選項不是必需的,所以喜好紀錄實際上可能不存在。
的首選項表看起來像:
id, userid, prefid, value
1, 1, 20, es
2, 1, 224, false
3, 1, 234, true
4, 2, 220, en
5, 2, 221, es
6, 2, 234, true
的prefid是關鍵的偏好定義,比方說爲主要語言,仲語言等的偏好的PREF值表可以或可以不具有一個排對應於tPrefs表中定義的每個首選項。合理?
這些值都存儲在tPrefVals表中。只是每個用戶的每個用戶有一行,而不是每個用戶有一個行有多個首選項。
目標: 獲取哪些用戶的首選項20或21設置爲'es'值。
SELECT DISTINCT tUsers.userid FROM tUsers
LEFT JOIN tPrefVals AS pri_lang ON tUsers.userid = pri_lang.user_id
LEFT JOIN tPrefVals AS sec_lang ON tUsers.userid = sec_lang.user_id
WHERE
((pri_lang.prefid = '20' AND pri_lang.value = 'es')
OR
(sec_lang.prefid = '21' AND sec_lang.value = 'es'))
我的想法是左連接pref值表兩次,但使用WHERE將其限制爲只有類型20或21的首選項。但是,我不確定這是做這樣一個查詢的最佳方式......你如何建議做這個查詢?
是否將pri_lang.value存儲在多個表中? – Anthony
什麼是'prefid'?它與他們的主要語言有關嗎? – Anthony
嗨安東尼,見上文。希望這更有意義。 – key2starz