0

日付を記録するためのUNIXタイムスタンプを含む、次のようなレコードセットがあります。

+----+-----------+-----------+---------+
|Id  |Start Date |EndDate    |MoreData |
+----+-----------+-----------+---------+
|1   |1292692439 |2147483647 |...      |
+----+-----------+-----------+---------+
|2   |1272776400 |1274331600 |...      |
+----+-----------+-----------+---------+
|3   |1293256800 |2147483647 |...      |
+----+-----------+-----------+---------+
|4   |1294552800 |2147483647 |...      |
+----+-----------+-----------+---------+

私がする必要があるのは、今月以前の開始日今月以降の終了日を含む行のみを返す MySQL クエリ (PHP を使用) を作成することです。

たとえば、上記のレコード セットで、今月 (2010 年 12 月) をクエリする場合、2 の終了日は 2010 年 5 月であり、4 の開始日は 2011 年 1 月であるため、ID 2 と 4 の行は返されません。

クエリがどのように見えるかについてのヘルプは大歓迎です。または、このクエリを作成するときにどの MySQL クエリ コマンドが役立つかについてのアイデアはありますか?

4

3 に答える 3

0

PHPからクエリを開始する必要があるため、PHPで特定の月の最初と最後の日のタイムスタンプを計算し、これらの値をパラメータとしてMySQLクエリにフィードするのが賢明です。次のようなものが必要になります。

function get_records_for_date($datestr) {
    $results = array();
    $ts = time();
    if ($datestr) {
        $ts = strtotime($datestr);
    }
    $first_day = mktime(0, 0, 1, date('n', $ts), 1, date('Y', $ts));
    $last_day = mktime(23, 59, 59, date('n', $ts), date('t', $ts), date('Y', $ts));
    $query = "SELECT * FROM yourtable WHERE start_date <= {$last_day} AND end_date >= {$first_day}";
    $query_result = mysql_query($query);
    while ($row = mysql_fetch_assoc($query_result)) {
        $results[] = $row;
    }
    return $results;
}

次に、パラメーターなしでこの関数を呼び出して現在の月のすべてのレコードを取得するか、strtotime()で解析できる任意の日付文字列を渡して特定の月のレコードを取得できます。

get_records_for_date();
get_records_for_date('2009-09-12');
get_records_for_date('April 5, 2005');
于 2010-12-19T03:06:51.057 に答える
0

これでうまくいくはずです:

SELECT * FROM table WHERE MONTH(FROM_UNIXTIME(start)) <= 12 AND MONTH(FROM_UNIXTIME(end)) >= 12 AND YEAR(FROM_UNIXTIME(start)) <= 2010 AND YEAR(FROM_UNIXTIME(end)) >= 2010
于 2010-12-18T16:36:27.123 に答える
-1

私は実際にこの形式を使用して日付をテストしました。

FROM_UNIXTIME(start) <= '2010-12-12' ...etc.

これは、実装が最も簡単で簡単でした。コメントで Thrustmaster によって提案されました。

于 2010-12-22T20:16:40.390 に答える