0

2 つのコードの結果の形式を一致させる必要があります。

これの出力/形式を取得する必要があります:

$event_day = $year.'-'.$month.'-'.$list_day;  // $event_day

これに一致します:

DATE_FORMAT(date,'%Y-%m-%d')

完全なコード:

$query = "
  SELECT title, DATE_FORMAT(date,'%Y-%m-%d') AS date 
  FROM table 
  WHERE user_id = '$session_user_id' 
    AND date BETWEEN '$year-$month-1' AND '" . date("Y-m-t", strtotime("$year-$month-1")) . "' 
    AND active = 1";

私の問題は、$event_day が 10 月、11 月、12 月のイベントのみを表示していることです。

以下のコードで同様の問題が発生しました。

$query = "
  SELECT title, DATE_FORMAT(date,'%Y-%m-%d') AS date 
  FROM table 
  WHERE user_id = '$session_user_id' 
    AND date LIKE '$year-$month%' 
    AND active = 1";

そして、このコードで修正されました:

$query = "
  SELECT title, DATE_FORMAT(date,'%Y-%m-%d') AS date 
  FROM table 
  WHERE user_id = '$session_user_id' 
    AND date BETWEEN '$year-$month-1' AND '" . date("Y-m-t", strtotime("$year-$month-1")) . "' 
    AND active = 1";

どうすればこれを整理できるか知っている人はいますか?

4

1 に答える 1

0

単に SQL クエリで日付を一致させようとしているだけの場合は、日付を#両端に を付けた文字列として渡すだけです。これにより、文字列を日付として解析するように SQL に指示され、指定した形式はそれほど重要ではありません。これに対する例外は、dd/mm/yyyy と mm/dd/yyyy のような US/EU の日付形式の間で混乱する可能性があることです。

$query = "SELECT title, DATE_FORMAT(myDate,'%Y-%m-%d') AS formattedDate 
          FROM table 
          WHERE user_id = '$session_user_id' 
          AND (myDate BETWEEN #$year-$month-1# AND #$year-$month-1#) 
          AND active = 1";

この形式は機能するはずですが、クエリは同じ日付の間にあるレコードを選択するため、実際にその日付のレコードのみが取得されます。単に使用することもできますWHERE date = #$year-$month-1#

edit : これは、日付フィールドのデータ型がデータベースで日付/時刻として正しく設定されていることを前提としています。

edit2 : 「日付」はデータベースの予約語であることが多く、実際にはフィールド名や変数には使用しないでください。上記の編集されたコードを参照してください。

date()さらに、クエリでフォーマットするのではなく、php を使用して関数を使用して日付をフォーマットすることをお勧めします。これにより、スクリプトで実際に日付を使用する柔軟性が向上します。

于 2013-02-22T11:47:03.567 に答える