site_idleは、intで秒数が入っています。
site_lasttimeは、datetimeで日時が入っています。
Whereに以下の条件をPDOで書くにはどのように書いたらよろしいでしょうか?
現在日時 > site_lasttime + site_idle
よろしくお願いします。
$sql_stmt = <<<EOS
SELECT
WM.site_id as site_id,
UM.user_id as user_id,
UM.accesslevel as accesslevel,
WM.site_title as site_title,
WM.site_url as site_url,
WM.site_idle as site_idle,
WM.site_lasttime as 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;
今家にいて検証できないんですが、イメージはこんな感じでしょうか。
「検索したい日時」は、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;
頼りない回答ですが、少しでも参考になれば幸いです。
今家にいて検証できないんですが、イメージはこんな感じでしょうか。
「検索したい日時」は、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;
頼りない回答ですが、少しでも参考になれば幸いです。
ああ、なぜかビッグな勘違いをしてました。
大変失礼しました。
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で条件判断するよりは良いかもです。
ご回答ありがとうございます。
やっと動作確認しました。
報告に時間がかかったのは日時に"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
失礼いたします。
質問を修正しておきます。
ああ、なぜかビッグな勘違いをしてました。
大変失礼しました。
site_idleもsite_lasttime同様テーブルから取得するんですね。
その場合、たぶんMySQLの組み込み関数を使うことになります。
くらいでしょうか。あいかわらず試せて無くて申し訳ないです。
2014/09/23 12:09:13SQL文がMySQLに依存するのがデメリットですが、全件抽出してPHPで条件判断するよりは良いかもです。
ご回答ありがとうございます。
やっと動作確認しました。
報告に時間がかかったのは日時に"0000-00-00 00:00:00"が入っていた場合、そのレコードを拾ってこないのですね。
where句に以下を追加してとりあえずしのぎました。
ありがとうございました。
2014/09/24 16:54:08無事解決しました。