如何计算php pdo中的唯一行?

如何计算php pdo中的唯一行?,php,mysql,pdo,rowcount,Php,Mysql,Pdo,Rowcount,这是我计算行数的常用方法 $query = "SELECT * FROM users"; $stmt = $db->prepare($query); $stmt->execute(); $count = $stmt->rowCount(); 这将计算所有行,即使我使用WHERE子句,它仍将计算满足该条件的每一行。但是,假设我有一个表,我们将其命名为tokenserned,这是我的实际表名。我有以下数据 user_id=1,2,4,5,8,8,2,4,3,7,6,2这是我表中的

这是我计算行数的常用方法

$query = "SELECT * FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();
这将计算所有行,即使我使用WHERE子句,它仍将计算满足该条件的每一行。但是,假设我有一个表,我们将其命名为tokenserned,这是我的实际表名。我有以下数据

user_id=1,2,4,5,8,8,2,4,3,7,6,2这是我表中的实际行-显然,user 1有1个条目,2有3个条目,等等。我总共有12个条目。但我不希望我的查询数是12。我希望我的查询对每个用户id进行一次计数。在本例中,我的计数应显示为8


有什么帮助吗?如果您有任何具体问题或需要澄清,我可以进一步解释。我将不胜感激。谢谢。

以下查询将生成不同的用户计数:

$query = "SELECT COUNT(DISTINCT user_id) AS cnt FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo "distinct user count: " . $row['cnt'];
不可能在一个查询中获得所有记录和不同的计数


是使用上面的查询,还是返回所有实际的不同行,实际上取决于是否需要完整记录。如果您只需要计数,那么返回记录中的数据是浪费的,我上面给出的可能是最好的选择。如果您确实需要数据,那么选择所有不同的行可能更有意义。

将查询更改为以下内容,这样您只显示唯一的用户id:


您可以在mysql中使用distinct只选择表中唯一的字段

$query = "SELECT distinct user_id FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();

你是说你想做SELECT*,然后在一个查询中检索不同的用户数吗?我将对此展开讨论,你可以选择阅读它。也许能给你一点启发。我有一个pch类型的网站。刮卡等,可能是真钱。您可以将您的代币用于抽奖项目。在抽奖条目表中,我想自动计算容易的条目数,同时也计算数据库中具有条目的唯一用户数。因此,如果有250000个条目行和5000个有条目的用户,我希望能够显示有条目的用户数,而不是全部250000行。@TimBiegeleisen是的,我相信这就是我要找的。如果您只需要计数,那么不要选择完整记录,只需选择计数。谢谢您的回复。我使用了两种计数方式,选择计数作为计数与$stmt->rowCount;,两者之间的区别是什么@DonaldFaulknor这取决于你是否真的需要这些记录,请看我上面更新的答案。我计划在单独的查询中计算这两个记录。但对于一个查询,我将统计唯一用户,然后是另一个查询中的所有行。所有的行对我来说都很容易。我将尝试使用DISTINCT作为我的解决方案。非常感谢。另外,对于这个特定任务,我只需要两个独立查询的总数。我不需要任何其他数据。对于我的图形,我需要最少数量的唯一用户和最少数量的总条目。所以我需要数一数,看看是否达到了这些最小值。听起来像是一个计划,德克斯特,我会试试的。谢谢
$query = "SELECT distinct user_id FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$count = $stmt->rowCount();