MYSQL 预处理的经典应用

hdhmail2000 2007-12-03 02:37:02
加精
mysql存储过程中不能动态limit?怎么解决?
存储过程中,limit竟然不能用变量?
高手看看怎么解决?帮帮忙了
...全文
1211 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2007-12-14
  • 打赏
  • 举报
回复
MYSQL 预处理的经典应用
hdhmail2000 2007-12-12
  • 打赏
  • 举报
回复
看到了
晕哦,搞那么不明显的地方,设计是不是有点问题呢?汗
hdhmail2000 2007-12-10
  • 打赏
  • 举报
回复
结贴在那里?
我只看到:
我要提问 生成帖子 删除帖子 修改帖子 锁定帖子 帖子加分 无满意结贴
懒得去死 2007-12-10
  • 打赏
  • 举报
回复
你看到的按钮右下边
懒得去死 2007-12-07
  • 打赏
  • 举报
回复
没有了。你就点结贴就行了。加分是要等到5天后的。
hdhmail2000 2007-12-07
  • 打赏
  • 举报
回复
点“帖子加分阿”
难道不是这样吗?
现在怎么改版了,感觉不如以前方便!
懒得去死 2007-12-07
  • 打赏
  • 举报
回复
你是怎么揭帖的?都是当天可以结的。
hdhmail2000 2007-12-07
  • 打赏
  • 举报
回复
这样提示:“此贴不到5天不能加分“
hdhmail2000 2007-12-07
  • 打赏
  • 举报
回复
不到5天不给结呢
怎么这么设置。。。
懒得去死 2007-12-06
  • 打赏
  • 举报
回复
不会吧。我一般发的帖子都是当天揭帖都可以的。
hdhmail2000 2007-12-06
  • 打赏
  • 举报
回复
晕,还不能结阿
hdhmail2000 2007-12-06
  • 打赏
  • 举报
回复
谢谢你了阿,结贴了
懒得去死 2007-12-06
  • 打赏
  • 举报
回复

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`(IN table_name varchar(255),
IN page_begin int,IN page_end int)
BEGIN
set @stmt = concat('select * from ',table_name,' limit ?,?');
prepare s1 from @stmt;
set @s1 = page_begin;
set @s2 = page_end;
execute s1 using @s1,@s2;
deallocate prepare s1;
END$$

DELIMITER ;

select * from cs_test;
call sp_test('cs_test',2,3);


结果:
query result(9 records)
id name
1 csdn1
2 colorful1
3 bbs1
4 cu1
5 cu2
6 woshiduide\n\n\n\n\n
7 woshicuode
8 I'm wrong
9 I'm right


query result(3 records)
id name
3 bbs1
4 cu1
5 cu2
hdhmail2000 2007-12-06
  • 打赏
  • 举报
回复
谢谢,那么如果是limit 10,20这种呢?支持吗?
懒得去死 2007-12-04
  • 打赏
  • 举报
回复

select * from test.song limit 10;
query result(10 records)
id name datetime rank
1 woshiduide1 2007-10-03 00:27:11 9
2 woshiduide2 2007-10-03 00:27:11 9
3 woshiduide3 2007-10-03 00:27:11 4
4 woshiduide4 2007-10-03 00:27:11 6
5 woshiduide5 2007-10-03 00:27:11 7
6 woshiduide6 2007-10-03 00:27:11 5
7 woshiduide7 2007-10-03 00:27:11 3
8 woshiduide8 2007-10-03 00:27:11 9
9 woshiduide9 2007-10-03 00:27:11 6
10 woshiduide10 2007-10-03 00:27:11 4

call sp_test('test.song',10);
query result(10 records)
id name datetime rank
1 woshiduide1 2007-10-03 00:27:11 9
2 woshiduide2 2007-10-03 00:27:11 9
3 woshiduide3 2007-10-03 00:27:11 4
4 woshiduide4 2007-10-03 00:27:11 6
5 woshiduide5 2007-10-03 00:27:11 7
6 woshiduide6 2007-10-03 00:27:11 5
7 woshiduide7 2007-10-03 00:27:11 3
8 woshiduide8 2007-10-03 00:27:11 9
9 woshiduide9 2007-10-03 00:27:11 6
10 woshiduide10 2007-10-03 00:27:11 4

hdhmail2000 2007-12-04
  • 打赏
  • 举报
回复
二楼的,你那个测试过吗?我测试过类似例子不行的!
我后来采用临时表用between and解决了的
yifuzhiming 2007-12-03
  • 打赏
  • 举报
回复
顶楼上的,prepare
懒得去死 2007-12-03
  • 打赏
  • 举报
回复

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test`$$

CREATE PROCEDURE `test`.`sp_test`(IN table_name varchar(255),IN total int)
BEGIN
set @stmt = concat('select * from ',table_name,' limit ?');
prepare s1 from @stmt;
set @s = total;
execute s1 using @s;
deallocate prepare s1;
END$$

DELIMITER ;

调用:
call sp_test('表名',数量);
hdhmail2000 2007-12-03
  • 打赏
  • 举报
回复
mei you hui??100fen !
da ban zhu ne???

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧