Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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 选择已向下投票但从未向上投票的用户_Php_Mysql - Fatal编程技术网

Php 选择已向下投票但从未向上投票的用户

Php 选择已向下投票但从未向上投票的用户,php,mysql,Php,Mysql,所以,我一直认为我在MySQL方面做得很好,直到我有了这个想法: 我有一个表,记录了带有以下字段的得票,名称恰当: id:投票的唯一id。 用户:投票人的唯一用户ID item:他们正在投票的项目的ID 投票:他们投的票是“成立”和“否决” 现在,我正试图想出一种SQL方法来查找那些只投反对票的用户。我知道有一种方法可以在查询了表中的大部分数据后,用php程序化地编写它,但是当只有几个查询可以找到它时,这种方法似乎真的非常低效 理想情况下,我希望我的结果只是一个拥有0张赞成票的用户列表,因为在表

所以,我一直认为我在MySQL方面做得很好,直到我有了这个想法:

我有一个表,记录了带有以下字段的得票,名称恰当:

id:投票的唯一id。 用户:投票人的唯一用户ID item:他们正在投票的项目的ID 投票:他们投的票是“成立”和“否决” 现在,我正试图想出一种SQL方法来查找那些只投反对票的用户。我知道有一种方法可以在查询了表中的大部分数据后,用php程序化地编写它,但是当只有几个查询可以找到它时,这种方法似乎真的非常低效

理想情况下,我希望我的结果只是一个拥有0张赞成票的用户列表,因为在表中意味着他们已经投票,所以他们只投了反对票,也许还有他们投的反对票的数量


关于如何处理这个问题有什么想法吗?

我还没有检查语法或任何东西,但我想到了这个

select user, count(user)
from votes
where user not in (
  select distinct user
  from votes
  where votes = 'up')
SELECT user 
FROM votes 
GROUP BY user 
  HAVING SUM(IF(vote = 'up', 1, 0)) = 0 
     AND SUM(IF(vote = 'down', 1, 0)) > 0

我忍不住觉得有一个整洁的用户组,但投票方式可以做到这一点。

在数据库调用中这样做有什么不对吗?比如:

$query = "SELECT id FROM votes WHERE vote = 'down'";
$result = mysql_query($query);
while ($rows = mysql_fetch_assoc($result))
{
 $curID = $rows['id'];
}

这计算每个用户给出的否决票数;但是,如果用户同时进行了向下投票和向上投票,则仍将包括它们和它们的向下投票总数。这很接近,但countuser在本例中给出了错误的值,即20而不是2。此外,它仅返回一个具有一个用户ID的一行数据有多个用户可以有多个投票,这意味着表中有多个条目。这个查询为每一次投票返回一条记录,而不是每个用户,并且它还将返回投票否决任何内容的用户,即使他们投票支持其他内容。可能是重复的哦,哇,这非常相似,很好!我在另一个问题上留下了一条评论,我认为这个问题有一个很好的答案,而且更早一点,它需要一个更好的、对SEO更友好的标题。我不知道这本身会是什么,但我认为不足以描述它的含义。这看起来很有希望,但有没有办法确定每个用户投了多少次反对票?当然,你应该能够添加SUMIFvote='down',1,0作为列规范的下票数。输出正是我想要的。这非常漂亮,并且解决了无法匹配子查询使用别名的位置的问题。
$query = "SELECT id FROM votes WHERE vote = 'down'";
$result = mysql_query($query);
while ($rows = mysql_fetch_assoc($result))
{
 $curID = $rows['id'];
}
<?php
// Make a MySQL Connection

$query = "SELECT user, COUNT(user) FROM votes where vote == 'down' GROUP BY user"; 

$result = mysql_query($query) or die(mysql_error());

// Print out result
while($row = mysql_fetch_array($result)){
    echo "User : ". $row['type'] ." has ". $row['COUNT(user)'] ." downvote/s.";
    echo "<br />";
}
?>
 select v.user from votes v where
   0=(select count(a.vote) from votes a where a.user=v.user and a.vote='up' group by user) u 
 and 
  0 <(select count(a.vote) from votes a where a.user=v.user and a.vote='down' group by user) d
  group by user;