MySQLに、id (1,2,3…連番)とdate(2007-04-21,2007-04-21,2007-04-22,2007-04-23…必ずしも連日ではない)がある場合、このdateのフィールドから、日付を呼び出して、phpで
2007年4月23日(月)
と表示するにはどうしたらいいのですか?
$sql = "select * from update_test order by id";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
として、echo $row["date"];で、2007-04-23のまま表示はできているのですが、更に見やすくしたいと思っています。
いろいろやり方があると思いますが、関数にしておいてこれを呼び出すようにしてみてはどうでしょうか。
<? printDate( '2007-4-23' ); // 表示用の関数を定義 function printDate( $dd ) { // 曜日の配列:0 ・・・日曜 6・・・ 土曜 $wday = array( "日", "月", "火", "水", "木", "金", "土" ); // - で日付を分割 $dArray = explode( "-" , $dd ); $stamp = mktime( 0, 0, 0, $dArray[1], $dArray[2], $dArray[0] ); // printf で整形して表示 printf("%d年%02d月%02d日(%s)\n", date( "Y", $stamp ), date( "n", $stamp ), date( "j", $stamp ), $wday[date( "w", $stamp )] ); } ?>
SQLを変更してymdカラムを追加
$sql = <<<_SQL_</p>
select
concat(
DATE_FORMAT(date,'%Y年%m月%d日('),
case dayofweek(date)
when 1 then '日'
when 2 then '月'
when 3 then '火'
when 4 then '水'
when 5 then '木'
when 6 then '金'
when 7 then '土'
end,
')'
) as ymd,
* from update_test order by id
_SQL_;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo $row['ymd'];
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.h...
このやり方では、どこか違ったのかまだ私の
レベルではできなかったです。
ただ、私のやり方が悪いだけで
russian-blueさんの回答は合っているのだと
思うので、もうちょっとMySQLの勉強をしてから
またトライしてみます。
ありがとうございました!
php側で日付を編集するのでなく、MySQL側で編集してしまい、その結果を受け取る方法もあります。
検索結果を編集するだけなので、MySQL側での性能には、殆ど影響しないと思います。
-- 表定義 create table update_test (id int, `date` date); -- テスト用データ格納 insert into update_test values (1,'2007-04-21'), (2,'2007-04-22'), (3,'2007-04-23'); -- 検索 select id, date_format(`date`, concat('%Y年%c月%e日(', elt(dayofweek(`date`),'日','月','火','水','木','金','土'), ')')) as `date` from update_test order by id;
こちらの方法も試してみたのですが、phpから
MySQLを操作するのがまだよく分かっていないので
うまくいきませんでした。
もう少し勉強してからこの方法でもまたトライしてみますね。
ありがとうございました!
Mookさんのやり方でできました!(T_T)
しっかり勉強して自分でも書けるように
なりたいです。
ありがとうございました。