- 締切済み
隙間があるレコードの"次へ"の扱い
データベース的なCGIを作ろうとしています。 1つ目の情報を見た後に次のを見る時の「次へ」ボタン(1つ前のデータに移動)なのですが、各データを削除せず続き番号なら、$noから1を引いた数のデータに移動すればいいだけですよね。 $nxt=$no--; <A href="$script?no=$nxt">次へ</A> しかし、これだと過去データを削除してしまった際に削除したデータを参照することになってしまう場合があります。 これを回避するにはどのようにしたらよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ralf124c
- ベストアンサー率52% (232/446)
データベース的というのは至言ですね。 消えてなくなるデータがあるという時点でデータベースでなく単なるデータ群でしかなくなるのですものね。 重要・不要はほぼ管理者側の主観に基づくもので、客観的に見ればデータベースとは要・不要にかかわらず(参照する人によって異なるわけなので)蓄積されてナンボのものでは無いかと思ってます。 世間一般的にはこういう消えてなくなる水物データ群も十把一絡げでDBと呼ばれることには結構な抵抗があります。(わたしは「水物ナンチャッテDB」と呼んでいます) 動的に増えたり減ったりするデータ群を参照する際に「次へ」とか「前へ」とかいった順序参照ってロジック自体が破綻しているんじゃないでしょうか? 今見ているデータだって次の瞬間にはなくなってる可能性だってあるし、質問は減ることが前提だけど参照前のレコードが増えて次のデータ参照したらまた同じデータが表示されたり・・・。 これをうまくまわすには、 1.増やすときは後ろに増やす、減らすときには物理的に削除をしないで削除フラグをつけて参照時には判定を行うとするのが扱いが楽かと思います。 2.そうは言ってもということなら、前後の参照時には必ず全体のレコード数に変化がないかチェックして変化があれば強制的に最初の参照ページに戻しちゃう。 とすれば問題は最小限にとどめられるかも。 もちろんユーザインターフェースは最悪だし、毎回の処理のオーバーヘッドだってデータ量に比例してバカにならなくなる。 最後はあきらめてエラー処理をちゃんと書くか、それがいやなら放っとく。 お仕事でこんな要求って多いんですが困っちゃいますよね。 このてのものは小規模ならいいのですが、データが多くなるのが事前に見込まれているならDBエンジンを使ってエイッ!ヤッ!でだましだまし使うのがいいと思います。何をもってして多いと判断するのかはその人次第なんですけど・・・ orz 。 ちゃんと回答になってればいいけど、役に立たなかったらスイマセン。
- Tacosan
- ベストアンサー率23% (3656/15482)
データの持ち方に依存しそうだけど, 例えば 「削除したデータ」だったら飛ばす.
補足
返答ありがとうございます。 その"「削除したデータ」だったら飛ばす"というのをしたいのですが、どうやったらいいのでしょうか? データの持ち方というのは何を伝えたらよいでしょうか? データはdb.datに1行1レコードで保存されてます。 $no<>$year<>$month<>$day<>$name<>~の形式で保存しています。 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; while (<IN>) { ($no,$year,$month,$day,$name,~) = split(/<>/); で呼び出して、今のデータの"1つ前"を指定するにはどうしたらいいでしょう? もしくは、"もし$noから1を引いたデータがなければさらに引いていく"的なことをさせれば良いのでしょうか?この場合、データが無いのはどうやって判別したらいいのでしょうか?