MySQLfiddle这里内部:http://sqlfiddle.com/#!2/6094e8/6令人费解的比较和排除单个MySQL表
小提琴包含下面我的例子伴随而来的数据。
我有我试图与工作单个表:
表1:user_answers表(存储用户的答案和他们的各种问题接受asnwers)
存储出关注值是:
用户ID(列uid
)
问题ID为他们回答的问题(列quid
)
问题的答案(列answer
)
个 可接受的答案存储#1存储其它可接受的答案针对该用户(列acceptable_1
)
可接受的答案存储#针对该用户(列acceptable_2
)
可接受的答案存储#3存储其它可接受的答案为用户2存储其它可接受的答案(列acceptable_3
)
可接受的答案存储#4存储用于该用户的其他可接受的答案(列acceptable_4
)他们的答案的
重要性(列importance
)
答案栏将存储之间的值1和4.
可接受的列保存与列位置一致的可接受答案。例如,用户1回答1,但将接受答案2和3。这将使acceptable_2 = 2
和acceptable_3 = 3
,留下acceptable_1
和acceptable_2
与0
的值。例如起见,我会试着解释结果我要找:
例1:
用户对英镑1 1分3的答案,并会从其他用户对于同一个问题的答案接受2和4。
用户2个回答2镑1和将接受来自其他用户的答案3同样的问题
结果例1: 用户1会接受用户2的回答和用户2会接受接受用户1的回答。这个结果应该从结果中排除。
示例2: 用户1回答2在quid 2,并会接受来自另一个用户对同一问题的回答1或4。
用户2回答2在quid 2,并会接受来自另一个用户对同一问题的回答2或4。
例2的结果: 用户1不会接受用户2的回答,但用户2会接受用户1的回答。这个比较有一个单一的冲突,应该包含在结果中。
示例3: 用户1回答1,并接受其他用户对同一问题的回答1或2。
用户2回答1在QID 3,并会接受来自另一个用户对同一问题的答案1或2。
实例3的结果: 用户1将接受用户2的答案,并且用户2将接受用户1的答案。没有冲突,这个结果应该排除在结果之外。
实施例4: 用户上嚼食4 1个解答1和将接受来自另一用户对同样的问题的答案1或2。
用户2在4号答案上回答3,并会接受来自另一个用户针对同一问题的答案3或4。
例4的结果: 用户1不接受用户2的回答,用户2不接受用户1的回答。有两个冲突,这个结果应该包含在结果中。
正如我希望看到的,我想抓住quid
来解答用户回答的问题,他们的回答在其他用户可以接受的列中存在冲突。
到目前为止,我已经能够使用此查询,收集每个用户的答案和接受的答案:
select ua.quid,
GROUP_CONCAT(IF(uid=1,answer,'') SEPARATOR '') as a1,
GROUP_CONCAT(IF(uid=2,answer,'') SEPARATOR '') as a2,
GROUP_CONCAT(IF(uid=1,acceptable_1,'') SEPARATOR '') as ac1_1,
GROUP_CONCAT(IF(uid=1,acceptable_2,'') SEPARATOR '') as ac2_1,
GROUP_CONCAT(IF(uid=1,acceptable_3,'') SEPARATOR '') as ac3_1,
GROUP_CONCAT(IF(uid=1,acceptable_4,'') SEPARATOR '') as ac4_1,
GROUP_CONCAT(IF(uid=2,acceptable_1,'') SEPARATOR '') as ac1_2,
GROUP_CONCAT(IF(uid=2,acceptable_2,'') SEPARATOR '') as ac2_2,
GROUP_CONCAT(IF(uid=2,acceptable_3,'') SEPARATOR '') as ac3_2,
GROUP_CONCAT(IF(uid=2,acceptable_4,'') SEPARATOR '') as ac4_2
from user_answers ua
where importance <> 1 and uid in (1, 2)
group by ua.quid
having sum(uid = 1) > 0 and
sum(uid = 2) > 0
不能够使用我用的房子在每个用户可接受的答案别名我WHERE子句(ac1_1等),我尚未成功比较所有变量以获得预期结果。
任何指导赞赏。
“表1”是否可以提供**更多**而不是2个用户的信息? –
@ PM77-1是的,它会存储几个用户的信息,但我们一次只能比较两个用户。 – Jared