CGI-BBS > データベース > 簡易データベース > 簡易データベースの改造で日付けを新着順にできない。


カレッヂ
カレッヂ


質問者 りゅうた  投稿日 2005/4/22(金) 02:41:15
http://www.rescue.ne.jp/CGI-BBS/database/database/20040421010331.shtml
のページを参考にしていましたが、
日付けの登録をした新着順で表示したいのに

現状は
4月16日(土)11時32分
4月18日(月)21時43分
4月21日(木)14時23分
4月3日(日)23時53分
4月5日(火)16時18分
4月9日(土)02時40分

目的は
4月21日(木)14時23分
4月18日(月)21時43分
4月16日(土)11時32分
4月9日(土)02時40分
4月5日(火)16時18分
4月3日(日)23時53分

の順番に表示されます。また、


search.cgiは以下の通りです。

print "Content-type: text/html\n\n";
print <<"EOF";
<html><head><title>$title</title></head>
<!---->
$body

<FONT size=-1>【検索結果】<br></FONT>
EOF

if (!@NEW) { print "●ご指定の条件では見当たりませんでした.<p>\n"; }
else {
	print "<table width=90% border=0 cellpadding=2 cellspacing=2 bordercolor=black><tr>\n";

        print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> a </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> b </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> c </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> d </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> e </FONT></th>\n";
        print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> f </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> g </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> h </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> i </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> j </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> k </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> l </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> m </FONT></th>\n";
	print "<th bgcolor=black nowrap><FONT size=-1 color=#ffffff> n </FONT></th>\n";

【習熟度】初めて

質問者 りゅうた  [削除]  投稿日 2005/4/22(金) 02:42:08
のつづきです。

	print "</tr>\n";

	@sorts = sort { (split(/,/,$a))[1] cmp (split(/,/,$b))[1] } @NEW;

        foreach $data (@sorts) {

		($d,$date_now,$YOU,$REN,$PREF,$SYO,$NAME,$AGE,$SEX,$TOOL,$BUST,$STYLE,$PSTYLE,$SYS,$EMAIL,$RANK,$COMENT) = split(/\,/,$data);

                if ($EMAIL ne '') {$PREF = "<a href=\"$EMAIL\" target=\"_blank\">$PREF</a>"; }

		print "<tr>\n";

                print "<td nowrap><FONT size=-1><center>$date_now</center></FONT></td>\n";
                print "<td nowrap><FONT size=-1><center>$YOU</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$REN</center></FONT></td>\n";
                print "<td nowrap><FONT size=-1><center>$PREF</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$SYO</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$NAME</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$AGE</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$SEX</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$TOOL</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$BUST</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$STYLE</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$PSTYLE</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$SYS</center></FONT></td>\n";
		print "<td nowrap><FONT size=-1><center>$RANK</center></FONT></td>\n";
		print "</tr><td colspan=10><FONT size=-1>$COMENT</FONT></td>\n";

		print "</tr>\n";
	}

	print "</table><p>\n";

	if ($next_num ne '') {

		while (($key,$val) = each %FORM2) {

			if ($key ne 'FF') { $buf = "$buf&$key=$val"; }
		}
		print "<h3>▼<a href=\"search.cgi?$buf&FF=$next_num\"><FONT size=-1>次の$page件</FONT></a></h3>\n";
	}
}
print "<hr noshade>[<a href=\"./\"><FONT size=-1>検索へ戻る</FONT></a>]<p>\n";
print "</body></html>\n\n";
exit;



超初心者なのでいっぱい書いちゃいました・・・
宜しければ皆様ご指導をよろしくお願いいたします。

回答者 sim  [削除]  投稿日 2005/4/22(金) 10:16:38
1.フォーマットしちゃう

登録日の保存時に

$date = "$m月$d日($w)$h時$i分";

のような形式になってるのかな?と思うのですが、これを

sprintf("%02d月%02d日(%s)%02d時%02d分",$m,$d,$w,$h,$i)

のようにしておくと良いかもしれません?

2.UNIXTIMEでソート

 $dで受け取っている部分には何が入っているのでしょう?

 これがUNIXTIMEであればここでソートしてあげれば良い気がします。

3.ソート部分でフォーマット

処理的に重そうですが、下記でも動くんじゃないかなと思います。

@sorts = sort { timeformat((split(/,/,$b))[1]) cmp timeformat((split(/,/,$a))[1]) } @NEW;
sub timeformat{
	if($_[0] =~ /(\d*)月(\d*)日(\D*)(\d*)時(\d*)分/){
		return sprintf("%02d月%02d日%s%02d時%02d分",$1,$2,$3,$4,$5);
	}
}
質問者 りゅうた  [削除]  投稿日 2005/4/23(土) 20:03:39
SIMさんお返事有難うございます。
おかげさまで私の要望に合った形にて表示されるようになりました。
本当に有難うございます。

登録時の時間の設定は下記になっています。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@wday_array = ('日','月','火','水','木','金','土');
$date_now = sprintf("%01d月%01d日(%s)%02d時%02d分",$mon +1,$mday,$wday_array[$wday],$hour,$min);

>$dで受け取っている部分には何が入っているのでしょう?


最初に知人に少し触ってもらったので、今もちんぷんかんぷんなのですが、
$dには実際CSVファイルを開くと空欄になっています。
知人も私と同じくらいの知識ですので、これでよいかどうかは解らないみたいです。

SIMさんに教えていただいた3の部分にて動きましたが、
今私のしている設定(記述)では動作は遅いのでしょうか?
今はDBの登録件数は20件くらいですが・・・・
もし、こうしたらいいんじゃない?という方法がありましたらお教え頂けますでしょうか?




返信(回答)する

 


Web裏技