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