$sql="SELECT count(*) as num FROM 表 WHERE type=2 or type=15 ORDER BY id desc LIMIT 0, n";
$result = mysql_db_query(数据库, $sql);
$arr=mysql_fetch_array($result);
$num=$arr['num'];echo $num; //这就是符合条件的总数目

解决方案 »

  1.   

    这个问题我试了一下,果然有你说的问题。直接查出了数据表中所有的符合条件的纪录,limit似乎没有起作用。关注中
      

  2.   

    我还是没有看明白楼主的意思。我想可能是 goodname(心灰意冷) 说的那意思吧。
      

  3.   

    回头测试一下别的方法,我目前忙于ora的操作,他妈的,捣鼓很长时间了
      

  4.   

    to goodname(心灰意冷) 
    楼主这样写会有问题吗?
    $sql="SELECT * FROM 表 WHERE type=2 or type=15 ORDER BY id desc LIMIT 0, n";
    $result = mysql_db_query(数据库, $sql);
    $num=mysql_num_rows($result);当然其中的n要是真实值,或是$n。
      

  5.   

    这个好像用子表查询比较容易实现,等mysql推出4.1就好了
    搂主的意思是:
    表有100条记录,他想从前50条来挑选符合条件(type=2 or type=15 )的纪录,他想找这个50怎么限制。
    而limit只限制挑选以后的纪录,不能限制所挑选目标的范围
      

  6.   

    如果楼主的意思是ashchen(辉) 所说的,可以用临时表。不可理解的是:明明简单的几行就能完成的工作,为什么非要压缩在一句里呢?难道代码行数的简单减少果真会提高效率吗?须知数据库控制器在解析sql指令时是需要占用大量内存的,而简单的sql指令是直接调用功能函数的。
      

  7.   

    不好意思,耽误大家时间了。我的意思跟ashchen(辉)差不多:我按表中ID号降序排序,也就是后加入的排第一,选前40个记录,再统计这40个中符合条件的(type=2 or type=15 )有多少个赋给$num,$sql="SELECT * FROM 表 WHERE type=2 or type=15 ORDER BY id desc LIMIT 0, 40";
    这只是得出整个表中前40个符合条件的记录,也就是说最后num总是40另外用count(*)也是得出整个表符合条件的记录数我想用临时表会提高些效率,先把这40个记录生成一张临时表,再得出符合条件的记录数会容易些,不过具体代码不太清楚,希望大家帮忙!
      

  8.   

    试试:
    要有一个自动增加的字段ID
    先求出目前最大ID号.
    得出目前第50位的ID号,在上面查询的时候加入ID判断 ..where id >= $id_50是否可以?
      

  9.   

    按id降序排列选第40个记录的id值($id),然后再在上面查询加入ID判断 ..where id >= $id$sql1="SELECT * FROM 表  ORDER BY id desc ";
    $seek=mysql_data_seek($sql1,40);
    $row=mysql_fetch_row($seek);   //这两句可能不对,怎么取第40个记录的id值?
    $id=$row[0];//id是第一个字段
    $sql2="SELECT * FROM 表 WHERE type=2 or type=15 and id>=$id ORDER BY id desc;
    $result1 = mysql_db_query($dbname, $sql2);
    $num=mysql_num_rows($result1);
      

  10.   

    SQL语句(两句),其他你自己写了
    CREATE TEMPORARY TABLE temp select * from 表 order by id desc limit 0,40
    select * from temp where type=2 or type=15
      

  11.   

    建立的临时表如何赋给变量$temp,可以$sql=select * from $temp where type=2 or type=15
      

  12.   

    表名是你自己指定的,想放在哪就放在哪。临时表的表名只在当前连接中有效,且由mysql保证他的唯一性。即多个程序可使用相同的临时表表名而不会发生冲突。临时表在关闭后自行消失。
      

  13.   

    也许我太笨了,用CREATE TEMPORARY TABLE temp select * from 表 order by id desc limit 0,40
    select * from temp where type=2 or type=15
    怎么都不行,我想把建立临时表的语句赋给变量如$sql=select * from····,可是不知用什么函数,要是大家还是看不懂我的意思,我真要怀疑我的智商了,以后再也不弄计算机了
      

  14.   

    $sql1 = "CREATE TEMPORARY TABLE temp select * from 表 order by id desc limit 0,40";
    $sql2 = "select * from temp where type=2 or type=15";
    mysql_query($sql1);
    $rs = mysql_query($sql2);
      

  15.   

    还是不行,mysql_query($sql1);不起作用,送出的字符串给谁呢,$sql2中temp也找不到,还是用id判断好些,只是不知怎么取前40个记录第40个记录的id值
    $sql1="SELECT * FROM 表  ORDER BY id desc ";
    $seek=mysql_data_seek($sql1,40);
    $row=mysql_fetch_row($seek);   //这两句可能不对,怎么取第40个记录的id值?
    $id=$row[0];//id是第一个字段
    $sql2="SELECT * FROM 表 WHERE type=2 or type=15 and id>=$id ORDER BY id desc;
    $result1 = mysql_db_query($dbname, $sql2);
    $num=mysql_num_rows($result1);
    也没有成功,第2、3、4行是想取第40个记录的id值,这三句有什么错误
      

  16.   

    $sql1=mysql_query("SELECT * FROM 表  ORDER BY id desc limit 0,40");
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    $seek=mysql_data_seek($sql1,39);
    $row=mysql_fetch_row($seek);   //这两句可能不对,怎么取第40个记录的id值?
    $id=$row[0];//id是第一个字段
    $sql2="SELECT * FROM 表 WHERE type=2 or type=15 and id>=$id ORDER BY id desc;
    $result1 = mysql_db_query($dbname, $sql2);
    $num=mysql_num_rows($result1);
    ========================================================================
    还是用临时表吧!$sql1 = "CREATE TEMPORARY TABLE temp_tbl select * from 表 order by id desc limit 0,40";
    $sql2 = "select * from temp_tbl where type=2 or type=15";
    mysql_query($sql1);
    $rs = mysql_query($sql2);
    $res = mysql_fetch_array($rs);
      

  17.   

    因为目前的MYSQL不支持子表查询,所以采用临时表的办法应该是最佳方案了具体语句如楼上的一样,这种方法是可行的
      

  18.   

    两种方案:
    1,使用临时表
    2,取出40条记录以后来个遍历判断赋值到新的数组
    更正一个小问题
    ........ limit 0,40  <---- 这里据我理解应该是39不要请言放弃,慢慢调试,随时叫个断点 echo $sdf;exit; 通过了继续调试下面