//这得到的是前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; //这就是符合条件的总数目
$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。
楼主这样写会有问题吗?
$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只限制挑选以后的纪录,不能限制所挑选目标的范围
搂主的意思是:
表有100条记录,他想从前50条来挑选符合条件(type=2 or type=15 )的纪录,他想找这个50怎么限制。
而limit只限制挑选以后的纪录,不能限制所挑选目标的范围
#12
如果楼主的意思是ashchen(辉) 所说的,可以用临时表。
不可理解的是:明明简单的几行就能完成的工作,为什么非要压缩在一句里呢?难道代码行数的简单减少果真会提高效率吗?须知数据库控制器在解析sql指令时是需要占用大量内存的,而简单的sql指令是直接调用功能函数的。
不可理解的是:明明简单的几行就能完成的工作,为什么非要压缩在一句里呢?难道代码行数的简单减少果真会提高效率吗?须知数据库控制器在解析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个记录生成一张临时表,再得出符合条件的记录数会容易些,不过具体代码不太清楚,希望大家帮忙!
我的意思跟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
是否可以?
要有一个自动增加的字段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);
$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
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保证他的唯一性。即多个程序可使用相同的临时表表名而不会发生冲突。临时表在关闭后自行消失。
临时表的表名只在当前连接中有效,且由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····,可是不知用什么函数,要是大家还是看不懂我的意思,我真要怀疑我的智商了,以后再也不弄计算机了
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);
$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值,这三句有什么错误
$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);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$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,取出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; //这就是符合条件的总数目
$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。
楼主这样写会有问题吗?
$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只限制挑选以后的纪录,不能限制所挑选目标的范围
搂主的意思是:
表有100条记录,他想从前50条来挑选符合条件(type=2 or type=15 )的纪录,他想找这个50怎么限制。
而limit只限制挑选以后的纪录,不能限制所挑选目标的范围
#12
如果楼主的意思是ashchen(辉) 所说的,可以用临时表。
不可理解的是:明明简单的几行就能完成的工作,为什么非要压缩在一句里呢?难道代码行数的简单减少果真会提高效率吗?须知数据库控制器在解析sql指令时是需要占用大量内存的,而简单的sql指令是直接调用功能函数的。
不可理解的是:明明简单的几行就能完成的工作,为什么非要压缩在一句里呢?难道代码行数的简单减少果真会提高效率吗?须知数据库控制器在解析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个记录生成一张临时表,再得出符合条件的记录数会容易些,不过具体代码不太清楚,希望大家帮忙!
我的意思跟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
是否可以?
要有一个自动增加的字段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);
$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
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保证他的唯一性。即多个程序可使用相同的临时表表名而不会发生冲突。临时表在关闭后自行消失。
临时表的表名只在当前连接中有效,且由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····,可是不知用什么函数,要是大家还是看不懂我的意思,我真要怀疑我的智商了,以后再也不弄计算机了
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);
$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值,这三句有什么错误
$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);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$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,取出40条记录以后来个遍历判断赋值到新的数组
更正一个小问题
........ limit 0,40 <---- 这里据我理解应该是39
不要请言放弃,慢慢调试,随时叫个断点 echo $sdf;exit; 通过了继续调试下面