人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpとMySQLの連携についての質問です。

(関連: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')

で、今月のデータを取り出すというのはうまくいっています。

上記の例はどこが間違っているのでしょうか。

●質問者: sun-chan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2007年 5月 MySQL PHP SELECT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● hopefully
●20ポイント

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' )

とかやったらいいんでしょうか。


2 ● Mook
●100ポイント ベストアンサー

一点確認したいのですが、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 でも処理ができると思います。

MySQL STR_TO_DATE

◎質問者からの返答

ありがとうございます。

month=05 でも過去に試していたんですが、その時は命令文のほうが悪かったのかうまくいかなかったようです。


教えていただいた上のほうのやり方で今やってみたところ、ちゃんと表示されました。

DEBUG とか、 mysql_query($sql, $conn)と書くやり方、抽出エラーの後ろに.$sqlがついているのとかは初めてみたので、また本で見て勉強します。


ひとつなにかやろうとすると、こうやってつまづいて、自分で本とかネットで調べていろいろ試してみるんですが、うまくいかなくって…はてなで質問してばっかりで、なんだか情けないです。(^_^;)


ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ