如何计算phppdo中的唯一行?

g9icjywg  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(365)

这是我常用的数行方法。。。

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

这将计算所有行,即使我使用where子句,它仍将计算满足该条件的每一行。但是,假设我有一个表,我们将其称为tokensearned(这是我实际的表名)。我有以下数据。。。
user_id=1,2,4,5,8,8,2,4,3,7,6,2(这些是我表中的实际行-很明显,user 1有1个条目,user 2有3个条目,以此类推)总之,我有12个条目。但我不希望我的查询数是12。我希望我的查询对每个用户id进行一次计数。在这个例子中,我的计数应该显示8。
有什么帮助吗?我可以进一步解释,如果你有任何具体的问题或澄清你需要。我会很感激的。谢谢您。

vh0rcniy

vh0rcniy1#

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

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

6ju8rftf2#

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

$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'];

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

roqulrg3

roqulrg33#

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

$query = "SELECT DISTINCT user_id FROM users";

相关问题