0

データベースに、開始日とその後の終了日としてユーザー入力を格納するテーブルがあります。ユーザーは時間範囲を選択する必要があり、この時間範囲内のレコードをテーブルに表示する必要がありますか?

他の多くの機能を試しstritotime();ましたが、どういうわけか正しい結果を得ることができません。

任意の可能な解決策をいただければ幸いです。

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

4

3 に答える 3

2

一緒にある可能性があります:

 SELECT count(*) FROM `table` 
 where 
 created_at>='2011-03-17 06:42:10' and created_at<='2011-03-17 06:42:50';

または間で使用:

  SELECT count(*) FROM `table` 
  where 
  created_at between '2011-03-17 06:42:10' and '2011-03-17 06:42:50';

私はあなたのテーブルを見なかったのであなたが何を表示したいかはあなたのレコードに依存し、あなたが実際に何をするかを例示するので、count(*)を変更してあなたが望むwhatrecordsを取得してください。

編集:ユーザーが時間の範囲を選択する場合、それらは変数になります

それならそのようなものになります

   SELECT records FROM `table` 
   where 
  created_at >= '".$var_start_time."' and ended_at <= '".$var_end_time."';
于 2012-12-05T09:47:00.433 に答える
1

mysqlクエリで使用できます...と...比較演算子 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

于 2012-12-05T09:44:39.870 に答える
1

これはSQLで簡単に実行できます。これは、推奨されるアプローチです。たとえば、これらの開始時刻と終了時刻がネイティブのDateTimeタイプとしてデータベーステーブルに格納されている場合、DBMSのDate関数を使用して、UNIXタイムスタンプとして範囲を選択できます(必要な場合)。

SELECT UNIX_TIMESTAMP(`start_time`), UNIX_TIMESTAMP(`end_time`) FROM `table` WHERE `start_time` > INTERVAL -1 DAY AND `end_time` < NOW();

start_timeこれは(MySQLを使用していると仮定して)列が過去24時間以内で、end_time列が現在のサーバー時間までであるテーブル内のすべての行を選択する1つの例です。

フォーマットされた日付を取得してから、PHPでUNIXタイムスタンプに変換するには、次のコマンドを使用します。

SELECT `start_time`, `end_time` FROM `table` WHERE `start_time` > INTERVAL -1 DAY AND `end_time` < NOW();

そして、PHPでは次のことができます。

$result['start_time'] = strtotime($result['start_time']);
$result['end_time'] = strtotime($result['end_time']);

strtotimeは、フォーマットされた日付がここにあるPHPの日付解析ルールに準拠していることを期待していることに注意してください。

PS:あなたが探しているPHPの関数は、stritotimeではなくstrtotimeです。

于 2012-12-05T09:51:07.597 に答える