Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Php 从一个MySQL表中获取条目,可以选择计算另一个MySQL表中各自的ID_Php_Mysql_Sql_Database - Fatal编程技术网

Php 从一个MySQL表中获取条目,可以选择计算另一个MySQL表中各自的ID

Php 从一个MySQL表中获取条目,可以选择计算另一个MySQL表中各自的ID,php,mysql,sql,database,Php,Mysql,Sql,Database,很长时间以来,我一直试图找到解决方案,阅读了很多关于PIVOT、JOIN等的主题,但似乎仍然找不到解决方案,所以我真的需要您的帮助 我正在为评论编写一个大拇指向上/向下系统。所以,我想列出我的所有评论和它们当前的投票总数,并显示作为comments\u voces表中的userID的我是否已经投票,以及所有这些,如果可能的话,我在一个SQL查询中假设这些 我有两个MySQL表: 1评论 评论 议论 用户ID 托皮西德 2评论和投票 评论 用户ID 投票=1或-1,表示拇指向上或向下。 > 在第一

很长时间以来,我一直试图找到解决方案,阅读了很多关于PIVOT、JOIN等的主题,但似乎仍然找不到解决方案,所以我真的需要您的帮助

我正在为评论编写一个大拇指向上/向下系统。所以,我想列出我的所有评论和它们当前的投票总数,并显示作为comments\u voces表中的userID的我是否已经投票,以及所有这些,如果可能的话,我在一个SQL查询中假设这些

我有两个MySQL表:

1评论

评论 议论 用户ID 托皮西德 2评论和投票

评论 用户ID 投票=1或-1,表示拇指向上或向下。 >

在第一部分中,我想显示当前所有投票的总和,这将是该特定commentID的SUMvote。投票总数应该适用于每一条评论,即使某条评论还没有收到任何投票,如果第二个表中没有该评论ID的条目。因此,如果comments_vote表中该评论的条目为零,则投票总数为0

我在这里遇到的一个主要问题是,我不仅想得到有投票权的评论!例如,这就是为什么在两个表和a.commentID=b.commentID之间使用一个简单的函数不起作用的原因,因为该函数只返回两个表都有匹配项的函数。对于pivot表,我从未真正让它工作过。JOIN函数似乎也不起作用。你知道我该怎么解决这个问题吗

>

因此,对于第二部分,我想确定我的userID是否已经在每条评论的comments\u voces表中。在某种程度上,如果我已经投票支持该评论,我将不会通过PHP/HTML再次投票

-

现在,我通过使用一个Mysql使它工作,而。。。然后在这个循环中有两个函数,这当然是一个糟糕的解决方案,因为它会降低站点速度。我的目标是在一个SQL查询中获得所有这些信息,或者在速度更快的情况下使用其他替代方法。我需要运行最快的解决方案


非常感谢你的帮助!非常感谢

我认为这应该行得通:

select
  c.commentID
, sum(case when cvuser.vote is null then ifnull(cv.vote,0) else 0 end) commentScore
, sum(case when cvuser.vote is null then abs(ifnull(cv.vote,0)) else 0 end) totalCommentScore
, sum(ifnull(cvuser.vote,0))!=0 userHasVoted -- 1 if user has voted, 0 if has not voted
from
  comments c
  left outer join comments_votes cv using (commentID)
  left outer join comments_votes cvuser on c.commentID=cvuser.commentID and cv.userID=<INSERT USER ID HERE>
group by c.commentID
第1部分: 逗号和连接方法都引用了一个更具体的SQL函数,称为内部连接,它只返回共享记录。如果要返回一个表的全部和另一个表的一部分,则需要左连接或右连接

这是我见过的关于连接的最好的资源:

第2部分:
如果您只做了一个SELECT*WHERE user_id=[您的用户id],您应该可以。如果速度确实是一个问题,请考虑在数据库中的USER ID列上执行列索引。这将消除任何速度问题。

非常感谢!左连接如上面Kevin Postlewaite所解释的那样工作。而且,我不知道,与列索引和链接到性能。我做了一些研究,这对我帮助很大!再次感谢!!非常感谢你!这确实更接近我的需要!UserHasVote部分工作起来很有魅力,唯一的缺陷是,他似乎会为commentScore计算一些条目两次。例如,我有一条评论,有两张赞成票和一张反对票,所以:1,-1,1。所以实际上,3票中的分数是1。但是查询给我的是7票中的5票。我真的不明白为什么?它是否与ifnull相关?你知道解决这个问题的办法吗?再次感谢,非常感谢您的帮助!啊哈:我认为这是重复计票的评论,因为第二个左外连接。我想我现在已经解决了这个问题,但我不确定。事实上,移除一个可以解决问题,但不幸的是,这并不能解决整个问题。你知道我怎样才能完全解决它吗?我真的被困在这里了:提前谢谢!