再SELECT 一次
$q = "SELECT COUNT(*) FROM `tablename` WHERE `fieldname` like '".$name."' ";

解决方案 »

  1.   

    通常是要用select count(*) from ....再查询一次的
    不过如果你使用mysq4.0以上版本则情况就要好一些
    FOUND_ROWS() 
    返回最后一个 SELECT SQL_CALC_FOUND_ROWS ... 命令如果没有以 LIMIT 进行限制结果时将返回记录行数。 
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
           WHERE id > 100 LIMIT 10;
    mysql> SELECT FOUND_ROWS();第二个 SELECT 将返回一个数字,它指示前一个没有被 LIMIT 子句限制的 SELECT 将返回多少行记录。注意,如果你使用 SELECT SQL_CALC_FOUND_ROWS ...,MySQL 不得不计算所有的记录行到结果集中。然而,这与你不使用 LIMIT 相比是更快一点的,因为结果集不需要发送到客户端。 SQL_CALC_FOUND_ROWS 从 MySQL 4.0.0 开始可以被使用。 
      

  2.   

    多谢“唠叨”兄,我测试了一下查询效率,环境:win2000+apache2+php5+mysql4,25000条数据,有930条符合查询条件,已建索引:1:查询两次取总数和前10条数据,要 0.0851 秒。
    2:用“唠叨”兄的方法,要 0.0761 秒。而单独取前10条数据,才只要 0.0009 秒,看来取总数太浪费时间了。
    不过“唠叨”兄的方法,已经提高了一些效率,多谢。
      

  3.   

    原来可以这样耶!! Articleid 是自增项,它一定要我 group by 一个,只好是它了SELECT a.* , count( al.articleid ) AS totalcount
    FROM sp_article AS a
    LEFT JOIN sp_article AS al ON al.typeid =1101
    WHERE a.typeid = 1101
    GROUP BY al.articleid
    LIMIT 10
      

  4.   

    上面的结果Group by 有点错误,返回的都是同一条记录了,应该是:SELECT a. * , count( al.articleid ) AS totalcount
    FROM sp_article AS a
    LEFT JOIN sp_article AS al ON al.typeid =1101
    WHERE a.typeid =1101
    GROUP BY a.articleid
    LIMIT 10
      

  5.   

    aniude(重返荣耀) 说的也有道理,怪不得google,baidu都显示“大约XXX条”呢。应该是缓存了。