【问题标题】:Count rows from results of a "mysql_query"从“mysql_query”的结果中计算行数
【发布时间】:2011-01-14 02:41:28
【问题描述】:

如果我有这个:

$results = mysql_query("SELECT * FROM table_name WHERE id=$id");

有没有办法检查有多少行的字段值为“私人”或“公司”?

我需要向用户显示找到了多少“私人”和“公司”记录,而无需进行其他查询。 (有一个名为“ad_type”的列包含“私人”或“公司”)

我已经知道用于计算所有行的 mysql_num_rows!

编辑: 有50万条记录!所以也许对结果的迭代很慢,你怎么看?

感谢大家的帮助:)

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    以上答案都很好,但是如果您要处理大量数据,当前检查的答案将非常低效

    上述答案的示例(通过 Gal)

    $results = mysql_query("SELECT *,(SELECT COUNT(*) FROM table_name WHERE column=$value) count FROM table_name WHERE id=$id");
    

    这很好,它会返回您需要的内容,但明显的设计缺陷是让您的 SQL 服务器返回结果然后重新返回它们并仅查看计数对于大量数据而言效率非常低。

    只需这样做:

    $results = mysql_query("SELECT * FROM table_name WHERE column=$value");
    $num_rows = mysql_num_rows($result);
    

    从长远来看,它会产生相同的结果并且效率更高,另外对于更大量的数据。

    【讨论】:

    • 这不会检索他的结果+计数,只有计数。另外,您的查询不完整,请修改。
    • 查询不完整,现在已修复以反映从查询中删除计数功能。此外,加尔。它确实计算其中包含多少。 $num_rows 有数字。以这种方式更有效,因为当将查询传回服务器时,服务器会自动传递结果集中的元素数,该结果集由 mysql_num_rows($result) 访问
    • $result 应该是 $results in: $num_rows = mysql_num_rows($result);
    【解决方案2】:

    你可以这样做:

    $results = mysql_query("SELECT *,(SELECT COUNT(*) FROM table_name WHERE column=$value) count FROM table_name WHERE id=$id");
    

    为了用sql获取号码。

    【讨论】:

    • 就性能而言,这是否比迭代 50 万条记录更好?
    • 我想是的(这就是我的做法)。在这种情况下,Mysql 过滤比使用 php 遍历结果要好,尤其是在您有大量行的情况下。
    【解决方案3】:

    如果你不想改变你的查询,你可以做一个

    $results = mysql_query("SELECT * FROM table_name WHERE id=$id");
    $count = mysql_num_rows($results);
    

    【讨论】:

      【解决方案4】:

      获取count()的步骤:

      1. 使用 mysql_query() 获取计数,
      2. 使用 mysql_fetch_array() 获取唯一的 1 行
      3. 获取该行唯一的一列,这是计数,

      这里是一个例子,它检查电子邮件是否已经被使用:

      // check whether email used
      $check_email_sql = "select count(*) from users where email='$email'";
      $row = mysql_fetch_array(mysql_query($check_email_sql));
      $email_count = $row[0];
      

      【讨论】:

        【解决方案5】:

        遍历结果集的行,分别统计ad_typePrivateCompany的出现次数?

        【讨论】:

          【解决方案6】:

          你可以的

          SELECT COUNT(*) FROM table_name WHERE id=$id GROUP BY fieldvalue HAVING fieldvalue = "Private"
          SELECT COUNT(*) FROM table_name WHERE id=$id GROUP BY fieldvalue HAVING fieldvalue = "Company"
          

          但这将是另一个查询。但是,如果您仍然处理数据,您可以在执行查询后简单地总结“私人”和“公司”行的数量。

          【讨论】:

            【解决方案7】:

            如果您不必获得所有结果,请使用它。

            SELECT ad_type, COUNT(*)
            FROM table_name
            WHERE (id=$id)
            GROUP BY ad_type
            HAVING ((ad_type = 'Private') OR (ad_type = 'Company'))
            

            如果您仍然需要获取id = $id 所在的所有记录,它将无法正常工作。但是在获取真实数据之前执行这样一个查询(一次)应该比使用子查询更有效。

            【讨论】:

              【解决方案8】:

              我想这个查询可以完成这项工作:

              SELECT ad_type, count(*) FROM table_name WHERE id=$id GROUP BY ad_type; 
              

              到目前为止,我没有看到使用 HAVING 的任何理由,因为您可能希望向用户展示在 DB 中找到的所有 ad_type 的概述(至少您没有提到 ad_type 还有其他值然后两个给定)。 我也强烈建议不要使用子查询;总是尝试只使用一个。 如果有一件事会减慢您的查询速度,那就是子查询(或多个子查询)。

              祝你好运!

              【讨论】:

                【解决方案9】:

                遍历查询结果,并计算每个结果中有多少出现在局部变量中。

                【讨论】:

                • 它可能多达 500,000 行,这里会选择迭代,还是其他查询,或者以某种方式使用缓存来更快地做事?请帮帮我
                • 您指定了“不进行其他查询”,所以我给了您一个选项而不进行其他查询。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-11-04
                • 2015-01-07
                • 1970-01-01
                • 2023-03-03
                • 2013-12-08
                • 1970-01-01
                • 2022-01-20
                相关资源
                最近更新 更多