如何解决帮助统计mysql结果
| 我必须修改一个现有的PHP脚本,以便它在显示当前页面的结果之前显示数据库中的匹配总数。查询是:SELECT products.features,products.make_id,products.model,products.price,products.id,brands.name AS brandname,brands.id AS brandid
FROM products
LEFT JOIN brands ON products.make_id=brands.id
WHERE products.active=1 AND brands.active=1 AND (products.category=22)
ORDER BY id DESC LIMIT 0,12
如何获得结果数? mysql_num_rows()显然返回12,但我不知道如何在此查询中使用count,我尝试的所有操作均返回一些错误。
我可以无限制地执行一次查询(子句?),但这似乎效率不高。
谢谢。
解决方法
使用MySQL函数FOUND_ROWS():
SELECT语句可以包含LIMIT
子句限制行数
服务器返回到客户端。在
在某些情况下,最好知道
该语句将有多少行
返回的结果没有LIMIT,但是
无需再次运行该语句。
要获得此行计数,请添加一个
中的SQL_CALC_FOUND_ROWS选项
SELECT语句,然后调用
FOUND_ROWS()之后:
因此,在PHP中运行以下两个查询,第一个语句给出前12行,第二个语句给出行总数:
$sql1 = \"SELECT SQL_CALC_FOUND_ROWS
products.features,products.make_id,products.model,products.price,products.id,brands.name AS brandname,brands.id AS brandid
FROM products
LEFT JOIN brands ON products.make_id=brands.id
WHERE (products.active=1) AND (brands.active=1) AND (products.category=22)
ORDER BY id DESC LIMIT 0,12\"
$sql2 = \"SELECT FOUND_ROWS()\"
,这将返回当前选择匹配的总行数。结果将是一行,只有一个字段,并且将保存total
SELECT COUNT(*) AS total
FROM products
LEFT JOIN brands ON products.make_id=brands.id
WHERE products.active=1 AND brands.active=1 AND products.category=22
您将必须将此作为单独的查询运行。
<?php
$q=mysql_query(\'above query\');
$result=mysql_fetch_array($q);
echo $result[\'total\']; // will print out the desired number of rows
您可能试图在同一选择中获得总数和限制,而工会可能这样做,但是由于您以前担心效率低下,因此情况可能更糟。
由于在您的OP中,您暗示这是用于分页的。让我告诉您,LIMIT m,n可能没有听起来那么快。了解如何进行改进,并阅读有关使用MySQL进行有效分页的更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。