• ベストアンサー

SQLの書き方

掲示板を作っています。 DBには掲示板の情報が入っており、 記事番号にはスレッドの番号、サブ記事番号には0が親記事、1以降が子記事と言う風にデータが入っています。 最新の投稿は一番上に表示され、スレッドの下にレスがついてくるタイプの掲示板を作成しようとしています。 このようなタイプの掲示板の場合どういう風にSQLを書いたらいいのでしょか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

先のSQL文の延長上で解決するなら、 select X.* from TARGET X, ( select Z.*,rownum R from ( select * from (select 記事番号,max(登録日時) 最終更新 from TARGET group by 記事番号) order by 最終更新 desc ) Z ) Y where X.記事番号=Y.記事番号 and R between 11 and 20 order by R,サブ記事番号; な感じかな。(テストしてません)

その他の回答 (2)

回答No.2

>最新のレスがあった場合、最新のレスがあるスレッド番号の記事が >一番上に表示して欲しいのです^^; 最新のレスは、どうやって判断するのか?書かれていません。 各レス毎に登録日時のような要素(項目)を持っているのでしょうか。 仮に、登録日時という項目があるのであれば・・ select X.* from TARGET X, (select 記事番号,max(登録日時) 最終更新 from TARGET group by 記事番号) Y where X.記事番号=Y.記事番号 order by Y.最終更新 desc,X.記事番号,サブ記事番号; 他にも分析関数を使う方法もあるけど、古いオラクルでも実現できる原始的な例だけ書いておきます。

yamadachan
質問者

補足

ありがとうございます。 k_o_r_o_c_h_a_nさんの書き方で書いたら希望通りのデータソート出来ました。 あと、1件目~20件目とかデータの指定をするにはORACLEでは どうやって書くのがいいのでしょうか? ROWNUMでBETWEENをしてやると出来るのはわかったのですが、 今回のSQLの場合ではどう書けばいいのかわかりません。 親記事を1件とカウントします。

noname#246547
noname#246547
回答No.1

サブ記事の下にサブ記事(サブサブ記事)は無いんですよね? select * form テーブル名 where 検索条件 order by スレッド番号 desc,サブ記事番号 asc; かな?

yamadachan
質問者

補足

回答ありがとうございます。 サブ記事の下にサブ記事はありません。 最新の記事が上に表示されなければ select * form テーブル名 where 検索条件 order by スレッド番号 desc,サブ記事番号 asc; でいけるのですが、 最新のレスがあった場合、最新のレスがあるスレッド番号の記事が 一番上に表示して欲しいのです^^;