【问题标题】:Select and count rows in the same query?在同一个查询中选择并计算行数?
【发布时间】:2016-11-01 10:08:20
【问题描述】:

我正在尝试找到一种方法来选择和计算我的数据库中的一些行。我正在检查 MySQL 文档,这就是我想出的:

$query = "SELECT *, COUNT(*) as total WHERE IMAGE != '' AND CATEGORY = '$category' $limit";

但是完成后会输出一行... :(

比我尝试过的:

$query = "SELECT * FROM PRODUCTS,
        (SELECT COUNT(*) as total FROM PRODUCTS WHERE IMAGE != '' AND CATEGORY = '$category') as x
        WHERE IMAGE != '' AND CATEGORY = '$category' $limit";

这可行,但是我真的不知道这是否会表现良好,因为有两个 SELECT 语句(我不需要'as x',但没有这个查询会失败)。

有没有更好的方法? 谢谢

【问题讨论】:

  • 您能否提供一些示例数据和查询的预期结果?
  • 如果代码看起来不容易受到 SQL 注入攻击会更好。
  • 我猜你正在寻找SQL_CALC_FOUND_ROWS,例如this question
  • Oblig Percona article 参考。
  • 谢谢!有人可以添加 SQL_CALC_FOUND_ROWS 相关解决方案作为答案吗?

标签: mysql sql select count row


【解决方案1】:

嘿,你在找这样的东西吗? 如果是,则无需计算计数,因为您可以稍后计算查询结果以在您的程序中得到总和。

【讨论】:

    【解决方案2】:

    另一种方法是使用sub-query,但不确定性能应该只执行一次,因为外部表没有相关性

    SELECT *, (select COUNT(*) from PRODUCTS) as total
    WHERE IMAGE != '' 
    AND CATEGORY = '$category' $limit
    

    【讨论】:

    • 谢谢,但不幸的是,您的查询给出了 NULL。 :(
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2013-04-26
    • 2014-11-09
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多