我有2张桌子:

一个是带有“ userid”列的用户,另一个是带有“是”和“否”列的意见。
“是”和“否”列均包含逗号分隔的值。

我想要的是计算“用户ID”在“是”列中出现的次数以及它在“否”列中出现的次数。

我现在所拥有的是

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


预先感谢您的任何帮助

最佳答案

您的查询只需要一点调整。还添加一个条件,该条件将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



SQLFiddle Demo

关于mysql - 在单个查询中使用多个find_in_set,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19078484/

10-15 14:46