首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

存储过程中的倒叙查询兑现不了么?desc

2012-11-05 
存储过程中的倒叙查询实现不了么??desc看代码SQL codedrop procedure if exists query_newsdelimiter $$

存储过程中的倒叙查询实现不了么??desc
看代码

SQL code
drop procedure if exists query_news;delimiter $$ create procedure query_news(IN page_size int,IN page_num int,IN order_key varchar(30),IN order_flag int,OUT num int)begin    DECLARE start_pos int;    DECLARE seq varchar(5);    DECLARE ps int;    DECLARE ok varchar(30);        set @seq=order_flag;    set @ps=page_size;    set @ok=order_key;        set num=(select count(id) from news);    set @start_pos=page_size*(page_num-1);        if @seq=0 then    PREPARE STMT FROM 'select * from news  order by ?  desc limit ?,?;';     end if;        if @seq=1 then         PREPARE STMT FROM 'select* from news order by ? asc limit ?,?;';     end if;        EXECUTE STMT USING @ok,@start_pos,@ps;end$$delimiter ;



1.这是一个分页的查询存储过程
2.用变量标识排序列和分页参数
3.磁存储过程的int类型的参数1表示升序,0表示降序
4.调用 call query_news(10,1,'id',1,@out);
5.问题是无论第四个int类型的参数怎么变都只能升序排列
6.sql语句经过测试可以显示降序
7.news的建表语句如下
SQL code
create table news(   id                   bigint not null auto_increment,   catagory             char(3) not null,   pub_time             datetime not null,   publisher_id         tinyint not null,   title                char(50) not null,   content              text,   primary key (id));


[解决办法]
set @asql=concat('select * from news order by ',@ok,' desc limit ',@start_pos,',',@ps);
PREPARE STMT FROM @asql;
EXECUTE STMT;

热点排行