MySQL在这里:http://sqlfiddle.com/#!2/15d447/1
我正在尝试使用单个表格:
表1:user_answers
表(存储用户对各种问题的答案)
存储的值得注意的值是用户ID(列uid
),他们正在回答的问题的问题ID(列quid
),问题的答案(列{{1 }}以及他们答案的重要性(专栏answer
)。
我想要的最终结果:
我希望能够抓住任何两个用户已经回答的所有问题,不包括任何未被对方回答的问题的答案,或者回答同一问题的值为1的问题适用于importance
中的任一用户。同样,这只会用于一次比较两个用户。
我的尝试一直很不成功,但这就是我尝试过的,只是将事情拼凑在一起:
importance
这没有结果,但我不确定原因。
#attempt one: trying to exclude answers that were not answered by both users
SELECT * FROM user_answers AS uid1
JOIN user_answers AS uid2 ON uid1.uid = uid2.uid
WHERE uid1.uid = 1
AND uid2.uid = 20008
AND uid1.quid IS NOT NULL
AND uid2.quid IS NOT NULL;
这给了我结果,但似乎因为连接而加倍。我也试图在这种尝试中消除任何相同的答案,这似乎在这个意义上起作用。
感谢任何指导。
感谢。
答案 0 :(得分:2)
您可以使用聚合查询回答您的问题。我们的想法是使用having
子句来过滤您正在查看的条件的行。
因为您对importance = 1
的问题不感兴趣,所以使用where
条款对其进行过滤:
select ua.quid
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
sum(uid = 20008) > 0;
如果您想要包含答案,可以这样做:
select ua.quid,
group_concat(concat(uid, ':', answer) order by uid) as answers
答案 1 :(得分:0)
只是您需要的简单版本。
select *
from user_answers a,
user_answers b
where a.quid = b.quid
and a.uid <> b.uid
and 1 not in (a.importance, b.importance)
如果您只想过滤问题,只需更改*
distinct a.quid
即可
在这里查看小提琴:http://sqlfiddle.com/#!2/15d447/15