user (id, myValue, ...)
user_preferred (id, userid, preferredValue) fk userid -> user(id)
說明:
用戶是所有用戶的表。 user_preferred是任何用戶首選值的表格。用戶可以在user_preferred中多次列出,但必須具有不同的值。查詢應返回具有與給定用戶的首選值相匹配的myValue的所有用戶。 $ userid是用戶傳遞的php變量。
的伎倆:
用戶可能沒有任何偏好,在這種情況下沒有在user_preference表中沒有條目。當上述查詢完成時,如果給定用戶沒有偏好,我想返回每個用戶。
打個比方:
我在一個酒吧和酒保問我,我想喝點什麼。我說給他我符合我的偏好的一切。第一輪我說我喜歡蹩腳的啤酒。所以他給了我一個福斯特。第二輪我說我沒有偏好,他給我12個品種,從芽蕾到吉尼斯。這些將是用戶,而不是啤酒。得到它?
查詢(到目前爲止):
SELECT * FROM user WHERE
IF ((SELECT preferredValue FROM user_preferred WHERE userid = $userid) IS NULL,
1,
user.myValue ANY (SELECT preferredValue FROM user_preferred WHERE userid = $userid)
)
附加絕招:
我不想跑 「選擇preferredValue FROM user.preferred其中id = $用戶ID」 兩次。我可以從第一次運行時保存結果,並以某種方式使用它來代替第二次運行?
它需要一點調整,但就是這樣。非常感謝,斯賓塞。 – BlackHat 2011-02-28 22:07:29