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

PHP5.5とMySQL5.0.95で、PDOで検索を掛けたいのですがwhere句でのdatetimeの扱いが分かりません。
site_idleは、intで秒数が入っています。
site_lasttimeは、datetimeで日時が入っています。
Whereに以下の条件をPDOで書くにはどのように書いたらよろしいでしょうか?

現在日時 > site_lasttime + site_idle

よろしくお願いします。


$sql_stmt = <<<EOS
SELECT
WM.site_idas site_id,
UM.user_idas user_id,
UM.accesslevelas accesslevel,
WM.site_titleas site_title,
WM.site_urlas site_url,
WM.site_idleas site_idle,
WM.site_lasttimeas site_lasttime
FROM
website_master as WM
LEFT JOIN
user_master as UM ON WM.user_id = UM.user_id
WHERE
//現在日時 > site_lasttime + site_idle
ORDER BY
UM.accesslevel DESC
EOS;

●質問者: wsapp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● sasada
●100ポイント ベストアンサー

今家にいて検証できないんですが、イメージはこんな感じでしょうか。

「検索したい日時」は、PHP側で作成して文字列にしておきます。

$現在時刻のコピー = $現在時刻;
$検索したい日時文字列 = date("Y-m-d H:i:s",
 date_sub($現在時刻のコピー, # 注意!date_subで変更されます!
 new DateInterval('PT' . site_idle . 'S')));

で、ヒアドキュメント内で条件式を指定してやります。
確か「'」でくくるのだと思いましたが、違ったかもしれません。
「#」でくくるか、何もくくらないかだったかもしれません。(あやふや)

$sql_stmt = <<<EOS
SELECT
(略)
WHERE
 site_lasttime < '{$検索したい日時文字列}'
(略)
EOS;

頼りない回答ですが、少しでも参考になれば幸いです。


wsappさんのコメント
ご回答ありがとうございます。 せっかくご回答いただいたのですが、PHPにテーブルのフィールドにある値をどうやって持ってくるのか全然イメージがわきません。 以下のような感じをイメージしていますが、これでは希望通り動きません。 困りました・・・。 >|| $sql_stmt = <<<EOS SELECT (略) WHERE WM.site_lasttime < DATE_SUB(date("Y-m-d H:i:s"), INTERVAL WM.site_idle SECOND) (略) EOS; ||<

sasadaさんのコメント
ああ、なぜかビッグな勘違いをしてました。 大変失礼しました。 site_idleもsite_lasttime同様テーブルから取得するんですね。 その場合、たぶんMySQLの組み込み関数を使うことになります。 >|| $sql_stmt = <<<EOS SELECT (略) WHERE TIMEDIFF(NOW() , WM.site_lasttime) > SEC_TO_TIME(WM.site_idle) (略) EOS; ||< くらいでしょうか。あいかわらず試せて無くて申し訳ないです。 SQL文がMySQLに依存するのがデメリットですが、全件抽出してPHPで条件判断するよりは良いかもです。

wsappさんのコメント
ご回答ありがとうございます。 やっと動作確認しました。 報告に時間がかかったのは日時に"0000-00-00 00:00:00"が入っていた場合、そのレコードを拾ってこないのですね。 where句に以下を追加してとりあえずしのぎました。 >|| WHERE OR WM.site_lasttime = "0000-00-00 00:00:00" ||< ありがとうございました。 無事解決しました。

質問者から

Where句の文字に誤りがありました。

//現在時刻 > site_lasttime + site_idle


//現在日時 > site_lasttime + site_idle

失礼いたします。
質問を修正しておきます。


関連質問

●質問をもっと探す●



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