2017-10-08 69 views
1

我已经尝试了很多解决方案,并决定在此处发布它以尝试找到解决方案。任何小小的帮助都是值得欢迎的(所以我也可以学习)。我有一个由ArticleID,UserID和投票(1/-1)组成的表格。 我要选择含有一定用户名和投票的SUM的条款ArticleID等于1mysql如何选择一个ID,当它的值等于X

到目前为止,我抵达:

SELECT catch.ID, votes.postid, catch.text, votes.userid, votes.value, catch.name FROM catch INNER JOIN votes ON catch.ID=votes.postid AND votes.userid=:iduser AND votes.value='1' ORDER BY ID DESC LIMIT 100 

但是这给了我一个错误的结果,因为它不不考虑有votes 1 and -1(其中SUM should be 0)的文章。

谢谢!

UPDATE

ID + Value + userid 
1 | 1 | 54 
1 | -1 | 54 
3 | 1 | 54 
7 | 1 | 56 
7 | -1 | 56 

鉴于上述情况表,并且只选择用户 '54' 通缉的结果应该是ID 3.

+0

您能否请分享一些示例数据为这两个表和您试图获得该示例的结果? – Mureinik

回答

0

这是你想要的吗?

SELECT c.ID, v.postid, c.text, v.userid, v.value, c.name 
FROM catch c INNER JOIN 
    votes v 
    ON c.ID = v.postid AND v.userid = :iduser 
GROUP BY c.ID 
HAVING SUM(v.value) = 1; 

这就是你所描述的,但它与你的查询有点不同。

+0

它看起来可能会伎俩。让我测试一下 – Giona

+0

谢谢@戈登,这就是诀窍。而且我还必须通过学习集团,拥有并缩短表格! – Giona

0

试试这个样子,但:ID用户设定什么特别的用户编号

SELECT catch.ID, 
     votes.postid, 
     catch.text, 
     votes.userid, 
     SUM(votes.value), 
     catch.name 
FROM catch 
LEFT JOIN votes ON catch.ID=votes.postid 
WHERE votes.userid = :iduser and votes.value='1' 
ORDER BY ID DESC 
LIMIT 100 
+0

嗨,我张贴的代码,已经工作,但只是返回所有的ID值为1.我想(但我失败了)获取ID的值是= 1。我已更新我的以一个例子评论。谢谢! – Giona

+0

@Giona嘿我编辑了你想要的东西,只需在votes.value处添加总和,然后在where子句中为votes.userId添加上面的内容,但必须使用 – MPetrovic

+0

感谢以上内容,但它不会提供想要的结果。我认为它应该组ID – Giona

相关问题