如果我有这个:
$results = mysql_query("SELECT * FROM table_name WHERE id=$id");
那么有没有办法检查字段值为“Private”或“Company”的行数?
我需要向用户显示找到的“私人”和“公司”记录的数量,而不进行其他查询。 (有一个名为'ad_type'的列,其中包含“私有”或“公司”)
我已经知道mysql_num_rows用于计算所有行!
编辑: 有500万条记录!所以也许结果的迭代很慢,你怎么看?
感谢您的帮助:)
答案 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()的步骤:
这是一个示例,用于检查电子邮件是否已被使用:
// 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)
迭代结果行并分别计算Private
中Company
和ad_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)
迭代查询结果,并计算每个显示在局部变量中的数量。