MYSQLの検索に関するしつもんです。


あるDBがありそこにはあるtable testがあります。
そのtestは1つのカラム mydate をもちます。
このmydateはdatetime型となっおり
test tableにはすでにデータが複数収まっています。

カラムdateを検索の対象としてデータを抽出する際のSql文が今回の質問です。

現在の日時と同じデータを持つレコードを抽出すべき
このようなsql文をつくり実行していますがうまくいきません。
DB Error: syntax error となってしまいます。

$d_date = date("Y-m-d H:i:s");
$sql = <<<EOS
SELECT*FROM test WHERE mydate = $d_date
EOS;

どのようにしたらいいでしょうか?
また、その際に、条件もマッチを 2007-06-07 00:00:00 というフルのマッチを条件としていますが
秒を抜いた
2007-06-07 00:00
がマッチすればよい、というようにしたいです。

ご教授おねがいします。


回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/06/07 18:09:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント60pt

phpで良いのかな?

$d_date = date("Y-m-d H:i:s");
$sql = <<<EOS
SELECT*FROM test WHERE mydate = $d_date
EOS;
echo $sql;

などといった形で$sqlの中身を確認してみましたか?

('シングルクォーテーション'が無いです)

http://dev.mysql.com/doc/refman/4.1/ja/datetime.html


以下は一例です。

$d_date = date("Y-m-d H:i");
$sql = "SELECT*FROM test WHERE DATE_FORMAT(mydate,'%Y-%m-%d %H:%i')='" . $d_date . "'";

下記ならばインデックスが有効に働きます。

$d_date1 = date("Y-m-d H:i:00");
$d_date2 = date("Y-m-d H:i:59");
$sql = "SELECT*FROM test WHERE mydate BETWEEN '" . $d_date1 . "' AND '" . $d_date2 . "'";

http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.h...

余談になりますが、長文になる場合は<<<による記述は有効ですが、短いソースの場合は逆に見づらくなりますので使い分けを考慮してみてください。

id:ken1bf7

すみません、書き忘れました。

PHPです。

大変わかりやすい説明ありがとうございました。

無事得たい結果を出せました。

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

2007/06/07 18:08:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません