這個答案跟我的意見 -
找到1條記錄(easy)
SELECT tmp1.rid AS rid
FROM mybb_reputation AS tmp1
WHERE tmp1.reputation = 3;
找到任何2條(使用<因爲關係的順序是不相關的答案)
SELECT CONCAT_WS(',',tmp1.rid, tmp2.rid) AS rid
FROM mybb_reputation AS tmp1
JOIN mybb_reputation AS tmp2
ON tmp1.rid < tmp2.rid
WHERE tmp1.reputation + tmp2.reputation = 3
找到任何3條記錄(相同的思路有關<前)
SELECT CONCAT_WS(',',tmp1.rid, tmp2.rid, tmp3.rid) AS rid
FROM mybb_reputation AS tmp1
JOIN mybb_reputation AS tmp2
ON tmp1.rid < tmp2.rid
JOIN mybb_reputation AS tmp3
ON tmp2.rid < tmp3.rid
WHERE tmp1.reputation + tmp2.reputation + tmp3.reputation = 3
查找4(算法只是重複)
SELECT CONCAT_WS(',',tmp1.rid, tmp2.rid, tmp3.rid, tmp4.rid) AS rid
FROM mybb_reputation AS tmp1
JOIN mybb_reputation AS tmp2
ON tmp1.rid < tmp2.rid
JOIN mybb_reputation AS tmp3
ON tmp2.rid < tmp3.rid
JOIN mybb_reputation AS tmp4
ON tmp3.rid < tmp4.rid
WHERE tmp1.reputation + tmp2.reputation + tmp3.reputation + tmp4.reputation = 3
無論您需要多少組合,您都需要繼續此操作。
你的分組工作如何?大多數答案都假定您的意思是檢查共享公用字段值的一組行的信譽。例如,爲什麼你不想要第6和7行,他們加到3 – AgRizzo
@ AgRizzo,如果聲譽的總和恰好等於3,那麼它是否返回1,2,3或者只有5或者是6,7 ,它應該沒問題。 – user2854563
(只是我的意見,但..)我認爲這是不可能的,給你一個解決方案,將找到每個可能的組合。找到1行等於3很容易。發現2並不困難,但你用一個笛卡兒積結束,檢查總和等於3.檢查任何3條記錄要困難得多。你有3以上的限制嗎?記錄必須是連續的嗎? – AgRizzo