首页 文章

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

提问于
浏览
0

这是我通常计算行数的方法......

$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

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

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

    在单个查询中无法获取所有记录和不同的计数 .

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

  • 0

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

    $query = "SELECT DISTINCT user_id FROM users";
    
  • 1

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

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

相关问题