如何得到mysql中要查询表中前n个记录中符合条件记录数

时间:2022-11-13 23:19:19
$sql="SELECT * FROM 表 WHERE type=2 or type=15 ORDER BY id desc LIMIT 0, n";
//这得到的是前n个符合条件的记录,怎么才能得出表中前n个记录中符合条件的记录,
$result = mysql_db_query(数据库, $sql);
$num=mysql_num_rows($result);
比如我要得到表中前15个记录中type=2或type=15的记录个数赋给num
不能用limit吧,能不能先把前n个记录导入临时表再从临时表里得出符合条件的个数,这样怎么做,是不是太麻烦了,mysql里没有更简单的方法吗,大家帮帮我吧,急死我了,在网上看了很多相关资料还是没有解决,我是初学者,初学者在这都是可以找到答案的,大家说是吧!

30 个解决方案

#1


你说了这么多,我都没看明白。

#2


就是,具体要解决什么问题
我也没有看明白

#3


$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; //这就是符合条件的总数目

#4


不明白,你那样写难道不对吗?

#5


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

#6


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

#7


我看明白了搂主的意思了,但是没有想出更好的办法来!!!

#8


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

#9


弄明白搂主的问题要比问题的本身难得多

#10


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。

#11


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

#12


如果楼主的意思是ashchen(辉) 所说的,可以用临时表。

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

#13


我也是这么认为楼主的意思的

#14


不好意思,耽误大家时间了。

我的意思跟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个记录生成一张临时表,再得出符合条件的记录数会容易些,不过具体代码不太清楚,希望大家帮忙!

#15


临时表我也不太清楚,可是可以用数组啊,统计数组的元素不可以吗?

#16


不能用子查询就用代码处理吧,效率的瓶颈未必就在这里。

#17


试试:
要有一个自动增加的字段ID
先求出目前最大ID号.
得出目前第50位的ID号,

在上面查询的时候加入ID判断 ..where id >= $id_50

是否可以?

#18


不管用什么,能不能提供详细解决方法,能达到效果就行。我被这问题困了好几天了。

#19


按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);

#20


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

#21


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

#22


表名是你自己指定的,想放在哪就放在哪。

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

#23


也许我太笨了,用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····,可是不知用什么函数,要是大家还是看不懂我的意思,我真要怀疑我的智商了,以后再也不弄计算机了

#24


$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);

#25


还是不行,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值,这三句有什么错误

#26


讨论半天没结果,关注

#27


$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);

#28


因为目前的MYSQL不支持子表查询,所以采用临时表的办法应该是最佳方案了

具体语句如楼上的一样,这种方法是可行的

#29


总是提示错误,哎!

#30


两种方案:
1,使用临时表
2,取出40条记录以后来个遍历判断赋值到新的数组
更正一个小问题
........ limit 0,40  <---- 这里据我理解应该是39

不要请言放弃,慢慢调试,随时叫个断点 echo $sdf;exit; 通过了继续调试下面

#1


你说了这么多,我都没看明白。

#2


就是,具体要解决什么问题
我也没有看明白

#3


$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; //这就是符合条件的总数目

#4


不明白,你那样写难道不对吗?

#5


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

#6


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

#7


我看明白了搂主的意思了,但是没有想出更好的办法来!!!

#8


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

#9


弄明白搂主的问题要比问题的本身难得多

#10


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。

#11


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

#12


如果楼主的意思是ashchen(辉) 所说的,可以用临时表。

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

#13


我也是这么认为楼主的意思的

#14


不好意思,耽误大家时间了。

我的意思跟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个记录生成一张临时表,再得出符合条件的记录数会容易些,不过具体代码不太清楚,希望大家帮忙!

#15


临时表我也不太清楚,可是可以用数组啊,统计数组的元素不可以吗?

#16


不能用子查询就用代码处理吧,效率的瓶颈未必就在这里。

#17


试试:
要有一个自动增加的字段ID
先求出目前最大ID号.
得出目前第50位的ID号,

在上面查询的时候加入ID判断 ..where id >= $id_50

是否可以?

#18


不管用什么,能不能提供详细解决方法,能达到效果就行。我被这问题困了好几天了。

#19


按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);

#20


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

#21


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

#22


表名是你自己指定的,想放在哪就放在哪。

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

#23


也许我太笨了,用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····,可是不知用什么函数,要是大家还是看不懂我的意思,我真要怀疑我的智商了,以后再也不弄计算机了

#24


$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);

#25


还是不行,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值,这三句有什么错误

#26


讨论半天没结果,关注

#27


$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);

#28


因为目前的MYSQL不支持子表查询,所以采用临时表的办法应该是最佳方案了

具体语句如楼上的一样,这种方法是可行的

#29


总是提示错误,哎!

#30


两种方案:
1,使用临时表
2,取出40条记录以后来个遍历判断赋值到新的数组
更正一个小问题
........ limit 0,40  <---- 这里据我理解应该是39

不要请言放弃,慢慢调试,随时叫个断点 echo $sdf;exit; 通过了继续调试下面