Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 计算两个用户之间的联接(不包括其中一个用户不存在列的位置)_Mysql_Sql_Database - Fatal编程技术网

Mysql 计算两个用户之间的联接(不包括其中一个用户不存在列的位置)

Mysql 计算两个用户之间的联接(不包括其中一个用户不存在列的位置),mysql,sql,database,Mysql,Sql,Database,Sqlfiddle此处: 我有一个表格(user\u answers),其中包含用户对问题的答案。在SQLFIDLE中,我们有用户1和用户2的数据。用户1总共回答了5个问题,用户2总共回答了8个问题 我正在寻找的结果: 我想知道一个用户回答了多少问题,而另一个用户也回答了多少问题。示例输出如下:“用户1回答了您回答的8个问题中的5个” 我已经尝试加入表,但它给我的结果比我预期的要多,而且我还没有指定要在此查询中测试哪些用户: SELECT * FROM user_answers t1 JOIN

Sqlfiddle此处:

我有一个表格(
user\u answers
),其中包含用户对问题的答案。在SQLFIDLE中,我们有用户1和用户2的数据。用户1总共回答了5个问题,用户2总共回答了8个问题

我正在寻找的结果:
我想知道一个用户回答了多少问题,而另一个用户也回答了多少问题。示例输出如下:“用户1回答了您回答的8个问题中的5个”

我已经尝试加入表,但它给我的结果比我预期的要多,而且我还没有指定要在此查询中测试哪些用户:

SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
AND t1.uid = 1
AND t2.uid = 2
然后,当我尝试指定用户时,此查询没有结果:

SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
SELECT * FROM user_answers t1
JOIN user_answers t2 ON t1.uid > t2.uid
AND t1.answer IS NOT NULL
AND t1.uid = 1
AND t2.uid = 2
我觉得我越来越近了,但需要一些指导


谢谢。

使用子查询怎么样

 SELECT * FROM user_answers t1
 where t1.uid=1 and t1.quid in 
 (select t2.quid from user_answers t2 where t2.uid=2);

要查找每个用户提出的问题总数,以及有多少问题是一致的:

SELECT
  count(distinct t1.id) user1_total,
  sum(t1.quid = t2.quid) shared_total,
  count(distinct t2.id) user2_total
FROM user_answers t1
CROSS JOIN user_answers t2
WHERE t1.uid=1
AND t2.uid=2
使用您的数据,这将返回:

USER1_TOTAL SHARED_TOTAL USER2_TOTAL
5           5            7


此外,任何时候,您都可以将
WHERE ID IN(子查询)
替换为
连接
,您应该-连接(实际上)总是执行得更好。

这非常有效。我在玩一个子查询,但我也在读它可能不如连接的地方。在这种情况下,联接仍然是可能的,还是子查询是我所寻找的结果的最佳方法?干杯。您当然可以将其替换为执行以下操作的联接`从用户中选择t1.quid\u回答t1联接用户\u回答t1上的t2.id=t2.id组,使用计数(*)>1;的t1.quid。但我建议先看看这个答案:这根本不能回答这个问题。用户的问题总数在哪里?共有的问题总数在哪里?