(関連:http://q.hatena.ne.jp/1178369803)
GETメソッドで program.php?year=2007&month=05とアクセスし、2007年05月のデータを表示したいと思っています。
$yearnumber = $_GET["year"];
$monthnumber = $_GET["month"];
$date_format = $yearnumber."-".$monthnumber;
として、MySQL に
SELECT * FROM table_name WHERE DATE_FORMAT(hizuke, '%Y-%m' ) = '$date_format'
という命令を送ったのですが、うまく2007年5月のデータが読み込めませんでした。
ちなみに、
SELECT * FROM table_name WHERE DATE_FORMAT(hizuke, '%Y-%m' ) = DATE_FORMAT( now(), '%Y-%m')
で、今月のデータを取り出すというのはうまくいっています。
上記の例はどこが間違っているのでしょうか。
一点確認したいのですが、GET で渡しているデータは"05"でしょうか。
SQL は文字列の比較になっているので、これが "5" である場合は異なると判断されます。
そうでなければ、
$yearnumber = $_GET["year"]; $monthnumber = $_GET["month"]; $date_format = $yearnumber."-".$monthnumber; print "DEBUG :$date_format<BR>\n"; // デバッグ確認用 $sql = "SELECT * FROM table_name WHERE DATE_FORMAT(hizuke, '%Y-%m') = '$date_format';"; $res = mysql_query( $sql, $conn ) or die("データ抽出エラー\n".$sql);
のような感じで、問題なく抽出できると思います(こちらでは成功しました。)。
DATE_FORMAT が返すのは文字列なのでその意味では問題ありませんが、DATE_FORMAT の中で使用するのは日付型なので
もし一度変換してからやるとしたら、
$date_format = $yearnumber."-".$monthnumber."-01"; $sql = "SELECT * FROM table_name "; $sql .= "WHERE DATE_FORMAT( hizuke, '%Y-%m') = DATE_FORMAT( STR_TO_DATE('$date_format', '%Y-%m-%d'), '%Y-%m' );";
のようになると思います。
後者のやり方であれば、月が 5 でも 05 でも処理ができると思います。
SQL文で日付を取得する際は
条件文を日付型にしないといけません。
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.h...
なんとなくわかるんですが、なんとなくわかりません…(ごめんなさい)
DATE_FORMAT(hizuke, '%Y-%m' ) = '$date_format'
と型の違うのを比べているのがいけないんですよね?
$_GETで得た値を使って日付型を作るのはどうやったらいいんでしょうか。
$yearnumber = $_GET["year"];
$monthnumber = $_GET["month"];
$date_format = $yearnumber."-".$monthnumber."-01";
DATE_FORMAT(hizuke, '%Y-%m' ) = DATE_FORMAT($date_format, '%Y-%m' )
とかやったらいいんでしょうか。
一点確認したいのですが、GET で渡しているデータは"05"でしょうか。
SQL は文字列の比較になっているので、これが "5" である場合は異なると判断されます。
そうでなければ、
$yearnumber = $_GET["year"]; $monthnumber = $_GET["month"]; $date_format = $yearnumber."-".$monthnumber; print "DEBUG :$date_format<BR>\n"; // デバッグ確認用 $sql = "SELECT * FROM table_name WHERE DATE_FORMAT(hizuke, '%Y-%m') = '$date_format';"; $res = mysql_query( $sql, $conn ) or die("データ抽出エラー\n".$sql);
のような感じで、問題なく抽出できると思います(こちらでは成功しました。)。
DATE_FORMAT が返すのは文字列なのでその意味では問題ありませんが、DATE_FORMAT の中で使用するのは日付型なので
もし一度変換してからやるとしたら、
$date_format = $yearnumber."-".$monthnumber."-01"; $sql = "SELECT * FROM table_name "; $sql .= "WHERE DATE_FORMAT( hizuke, '%Y-%m') = DATE_FORMAT( STR_TO_DATE('$date_format', '%Y-%m-%d'), '%Y-%m' );";
のようになると思います。
後者のやり方であれば、月が 5 でも 05 でも処理ができると思います。
ありがとうございます。
month=05 でも過去に試していたんですが、その時は命令文のほうが悪かったのかうまくいかなかったようです。
教えていただいた上のほうのやり方で今やってみたところ、ちゃんと表示されました。
DEBUG とか、 mysql_query($sql, $conn)と書くやり方、抽出エラーの後ろに.$sqlがついているのとかは初めてみたので、また本で見て勉強します。
ひとつなにかやろうとすると、こうやってつまづいて、自分で本とかネットで調べていろいろ試してみるんですが、うまくいかなくって…はてなで質問してばっかりで、なんだか情けないです。(^_^;)
ありがとうございました。
ありがとうございます。
month=05 でも過去に試していたんですが、その時は命令文のほうが悪かったのかうまくいかなかったようです。
教えていただいた上のほうのやり方で今やってみたところ、ちゃんと表示されました。
DEBUG とか、 mysql_query($sql, $conn)と書くやり方、抽出エラーの後ろに.$sqlがついているのとかは初めてみたので、また本で見て勉強します。
ひとつなにかやろうとすると、こうやってつまづいて、自分で本とかネットで調べていろいろ試してみるんですが、うまくいかなくって…はてなで質問してばっかりで、なんだか情けないです。(^_^;)
ありがとうございました。