![]() |
| カレッヂ |
質問者 りゅうた
投稿日 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裏技 |