从“mysql_query”的结果中计算行数

时间:2010-02-07 16:18:12

标签: php sql mysql

如果我有这个:

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

那么有没有办法检查字段值为“Private”或“Company”的行数?

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

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

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

感谢您的帮助:)

9 个答案:

答案 0 :(得分:11)

上述答案非常棒,但如果您处理大量数据,目前检查的答案效果会非常低效

上述答案的例子(通过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);

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

答案 1 :(得分:3)

您可以执行以下操作:

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

以便用sql获取数字。

答案 2 :(得分:2)

如果您不想更改查询,可以执行

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

答案 3 :(得分:2)

获取count()的步骤:

  1. 使用mysql_query()来获取计数,
  2. 使用mysql_fetch_array()获取唯一的一行
  3. 获取该行的唯一一列,这是计数,
  4. 这是一个示例,用于检查电子邮件是否已被使用:

    // 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];
    

答案 4 :(得分:1)

迭代结果行并分别计算PrivateCompanyad_type的出现次数?

答案 5 :(得分:0)

你可以做到

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"

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

答案 6 :(得分:0)

如果您不必获得所有结果,请使用此功能。

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

如果您仍需要获取id = $id所有的记录,则无效。但是在获取实际数据之前执行这样的查询(一次)应该比使用子查询更有效。

答案 7 :(得分:0)

我猜这个查询可以完成这项任务:

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

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

祝你好运!

答案 8 :(得分:-2)

迭代查询结果,并计算每个显示在局部变量中的数量。