【发布时间】:2011-07-06 01:28:50
【问题描述】:
两个表:
user (id, myValue, ...)
user_preferred (id, userid, preferredValue) fk userid -> user(id)
说明:
user 是所有用户的表。 user_preferred 是任何用户首选值的表。一个用户可以在 user_preferred 中多次列出,但必须具有不同的值。查询应返回 myValue 与给定用户的首选值匹配的所有用户。 $userid 是传递的用户的php变量。
诀窍:
用户可能没有偏好,在这种情况下,user_preference 表中没有条目。完成上述查询后,如果给定用户没有偏好,我想返回每个用户。
类比:
我在酒吧,调酒师问我想喝什么。我说把他所有符合我喜好的东西都给我。第一轮我说我喜欢糟糕的啤酒。所以他给了我一个福斯特。第二轮我说我没有偏好,他给了我 12 品脱,从 Bud Light 到 Guinness。这些将是用户,而不是啤酒。明白了吗?
查询(到目前为止):
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)
)
附加技巧:
我不想运行两次“SELECT preferredValue FROM user.preferred where id = $userid”。我可以保存第一个运行时的结果并以某种方式使用它来代替第二个吗?
【问题讨论】:
标签: mysql performance conditional