有两张表,第一张是存新闻的表 sitenews结构如下:
SQL> desc sitenews;
Name Type Nullable Default Comments
------------- -------------- -------- ---------------------------------- --------------------------------
N_ID NUMBER(10) 新闻唯一10位数字编号,对应主键pk_news_id
N_DEL NUMBER(1) Y 0 是否已经删除,1表示已经删除
N_UP NUMBER(3) Y 255 在栏目中的次序,0-->999,从小到大
N_HIT NUMBER(10) Y 0 本条新闻点击次数
N_IP VARCHAR2(15) Y 发布本条新闻的IP地址
N_STARTDATE DATE Y sysdate 开始发布的时间,管理员可以自定义
N_ENDDATE DATE Y to_date('2099-12-31','yyyy-mm-dd') 结束发布的时间,管理员可以自定义,默认值为:2099年1月31日
N_REALDATE DATE Y sysdate 真实发布时间,不能修改的
N_DISPLAYDATE DATE Y sysdate 发布时间,管理员可以自定义
N_BLOCK NUMBER(5) Y 所在栏目,外键
N_PARENTID NUMBER(10) Y 所在父标题,外键
N_TITLE VARCHAR2(2000) Y 标题
。
。
。
。
。第二张是栏目表,存新闻栏目,结构如下:
SQL> desc siteblocks;
Name Type Nullable Default Comments
------------------- -------------- -------- --------------- ------------------
B_ID NUMBER(5) 唯一编号
B_PARENTID NUMBER(5) Y 父栏目编号
B_UP NUMBER(3) Y 255 栏目排序,从小到大0-999
B_SORT VARCHAR2(4) Y 'asc' asc-->正序,desc-->倒序
B_HIDE NUMBER(1) Y 0 1-->隐藏, 0-->显示
B_NAME VARCHAR2(200) Y 栏目名称
B_INTRO VARCHAR2(2000) Y 栏目简介
B_LISTTYPE NUMBER(1) Y 1 1-->列表,0-->分页显示
B_DATE DATE Y sysdate 栏目建立时间 这个栏目有一个字段(b_sort)表示当前栏目中新闻是正序还是倒序排列,
现在我要选择某个栏目的所有新闻,用栏目的指定顺序排列,如何写?
select * from sitenews where n_block=14 order by .................. (n_id,编号14栏目的b_sort的值 asc/desc, 如 order by n_id desc)怎么与??
求救了!
SQL> desc sitenews;
Name Type Nullable Default Comments
------------- -------------- -------- ---------------------------------- --------------------------------
N_ID NUMBER(10) 新闻唯一10位数字编号,对应主键pk_news_id
N_DEL NUMBER(1) Y 0 是否已经删除,1表示已经删除
N_UP NUMBER(3) Y 255 在栏目中的次序,0-->999,从小到大
N_HIT NUMBER(10) Y 0 本条新闻点击次数
N_IP VARCHAR2(15) Y 发布本条新闻的IP地址
N_STARTDATE DATE Y sysdate 开始发布的时间,管理员可以自定义
N_ENDDATE DATE Y to_date('2099-12-31','yyyy-mm-dd') 结束发布的时间,管理员可以自定义,默认值为:2099年1月31日
N_REALDATE DATE Y sysdate 真实发布时间,不能修改的
N_DISPLAYDATE DATE Y sysdate 发布时间,管理员可以自定义
N_BLOCK NUMBER(5) Y 所在栏目,外键
N_PARENTID NUMBER(10) Y 所在父标题,外键
N_TITLE VARCHAR2(2000) Y 标题
。
。
。
。
。第二张是栏目表,存新闻栏目,结构如下:
SQL> desc siteblocks;
Name Type Nullable Default Comments
------------------- -------------- -------- --------------- ------------------
B_ID NUMBER(5) 唯一编号
B_PARENTID NUMBER(5) Y 父栏目编号
B_UP NUMBER(3) Y 255 栏目排序,从小到大0-999
B_SORT VARCHAR2(4) Y 'asc' asc-->正序,desc-->倒序
B_HIDE NUMBER(1) Y 0 1-->隐藏, 0-->显示
B_NAME VARCHAR2(200) Y 栏目名称
B_INTRO VARCHAR2(2000) Y 栏目简介
B_LISTTYPE NUMBER(1) Y 1 1-->列表,0-->分页显示
B_DATE DATE Y sysdate 栏目建立时间 这个栏目有一个字段(b_sort)表示当前栏目中新闻是正序还是倒序排列,
现在我要选择某个栏目的所有新闻,用栏目的指定顺序排列,如何写?
select * from sitenews where n_block=14 order by .................. (n_id,编号14栏目的b_sort的值 asc/desc, 如 order by n_id desc)怎么与??
求救了!
应该对应
第二张是栏目表 siteblocks B_ID 唯一编号
那么就很好写了。
SELECT * FROM sitenews A
LEFT JOIN
siteblocks B
ON A.N_BLOCK = B.B_ID
WHERE (条件)
ORDER BY B.B_UP
--修改下
SQL> select * from sitenews; N_ID N_BLOCK N_DEL
---------- ---------- ----------
1 14 AAA
2 14 DDD
3 14 SSS
4 15 WWW
6 14 EEE
5 12 RRR
7 14 TTT已选择7行。SQL> select * from siteblocks; B_ID B_SORT
---------- ----------
1 asc
2 desc
SQL> 1 create or replace procedure myproc(b_sort in varchar2,rs out sys_refcursor) 2 as
3 begin
4 if Upper(b_sort)='ASC' then
5 open rs for select * from sitenews where n_block=14 order by n_id a
c;
6 else
7 open rs for select * from sitenews where n_block=14 order by n_id
esc;
8 end if;
9* end;
QL> /过程已创建。
QL> var aa refcursor
QL> var temp varchar2
QL> select b_sort into :temp from siteblocks where b_id=1;_SORT
---------
scQL> begin
2 myproc(:temp,:aa);
3 end;
4 /L/SQL 过程已成功完成。QL> print :aa N_ID N_BLOCK N_DEL
--------- ---------- ----------
7 14 TTT
6 14 EEE
3 14 SSS
2 14 DDD
1 14 AAAQL>
select * from sitenews where n_block=14 and B_SORT= 'desc' order by n_id desc
你好!谢谢回复.第一张是存新闻的表 sitenews N_BLOCK 所在栏目,外键
应该对应
第二张是栏目表 siteblocks B_ID 唯一编号是这样的.但是您没有理解我的意思,我是根据b.b_up的值是asc/desc 去用n_id 排序,
如果表siteblock 中 b_id=14记录 的b_sort 值为asc 则为 select * from sitenews where n_block=14 order by n_id asc
如果表siteblock 中 b_id=14记录 的b_sort 值为desc 则为 select * from sitenews where n_block=14 order by n_id desc
begin
execute immediate 'select * from sitenews where n_block=14 order by n_id &aa';
end;
order by decode(b_sort,'asc',1,'desc',a.N_ID,1) desc;
使用decode函数即可,当是正序的时候,order by 1 desc,是倒序的时候 order by N_ID desc;