0

私は2つのテーブルを持っています:

1 つは「userid」列のユーザーで、もう 1 つは「はい」と「いいえ」列の意見です。「はい」と「いいえ」の両方の列には、カンマ区切りの値が含まれています。

私が望んでいたのは、「userid」が「はい」列に表示される回数と、「いいえ」列に表示される回数をカウントすることです。

私が今持っているのはこれです

SELECT userid, COUNT(yes), COUNT(no)
FROM users LEFT JOIN opinion ON (FIND_IN_SET( userid, yes) > 0)
GROUP BY userid

上記は、各ユーザーが「はい」列に表示された回数をカウントするため機能しますが、「いいえ」列には誤って表示されます。「いいえ」をエコーすると、「はい」をエコーし​​ても同じ結果になります

「ユーザー」のサンプルデータ

1
2
3

「はい」のサンプルデータ

1,2
1,3
2,3
1

「いいえ」のサンプルデータ

1,2
1,2
1,3

望ましい結果は上記のデータです。

users     yes    no
1         3      3
2         2      2
3         2      1

助けてくれてありがとう

4

1 に答える 1

1

クエリを少し調整するだけです。他のテーブルのuserID列と結合する条件も追加します。値のカウント中に、集計関数内でNOも使用する必要があります。FIND_IN_SET()MAX()

SELECT  a.userID,
        SUM(FIND_IN_SET(a.userID, b.yes) > 0) TotalYes,
        SUM(FIND_IN_SET(a.userID, b.no) > 0) TotalNo
FROM    users a
        LEFT JOIN opinion b
            ON FIND_IN_SET(a.userID, b.yes) > 0 OR
                FIND_IN_SET(a.userID, b.no) > 0 
GROUP   BY a.userID
ORDER   BY a.userID
于 2013-09-29T13:40:32.520 に答える