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

时间:2018-12-09 02:20:05

标签: php mysql pdo rowcount

这是我通常的行计数方式...

$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(这些是我表中的实际行-显然,用户1有1个条目,用户2有3个条目,等等。我总共有12个条目。但是我不希望我的查询计数为12。我希望我的查询计数一次每个user_id。在此示例中,我的计数应显示为8。

对此有任何帮助吗?如果您有任何特定的问题或需要澄清,我可以进一步解释。我会很感激。谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

不可能在单个查询中获得所有记录和唯一计数。

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

答案 1 :(得分:0)

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

$query = "SELECT DISTINCT user_id FROM users";

答案 2 :(得分:0)

您可以在mysql中使用“ distinct”来仅选择表中的唯一字段。

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