0

2010年から2040年までの日付を次の形式でmySQLテーブルに保存しています。

2012-01-02

テーブルから各日付を選択し、しばらく表示します - mysql_fetch_assoc ループ

while($row=mysql_fetch_array($result)){

    echo $row["date"];

}

新しい月が始まったことを確認するにはどうすればよいですか? 私は、explode() を使用して現在の月のカウンターを var に配置する必要があると思います...しかし、var は while ループで上書きされるため、どのように比較を行うことができますか?

if(old month != new month){
    do something..
}

ありがとう

4

4 に答える 4

6
$old_month = '';

while($row=mysql_fetch_array($result)){
  list($year, $month, $day) = explode('-', $row["date"]);
  if($old_month != $month) {
    $old_month = $month;
    echo 'new month';
  }
}
于 2012-09-10T04:53:34.450 に答える
1

を使用date_parseして、ほぼすべての日付形式をそのコンポーネントに解析できます。例えば:

$date = date_parse("2012-01-02");
var_dump($date);

出力します:

array(12) {
  ["year"]=>
  int(2012)
  ["month"]=>
  int(1)
  ["day"]=>
  int(2)
  ["hour"]=>
  bool(false)
  ["minute"]=>
  bool(false)
  ["second"]=>
  bool(false)
  ["fraction"]=>
  bool(false)
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
  ["is_localtime"]=>
  bool(false)
}

...そしてあなたのコードは次のようになります:

$month = false;
while( $row = mysql_fetch_array($result) ) {
    $date = date_parse( $row["date"] );

    if( $month != $date["month"] ) {
        $month = $date["month"];
        echo "month: {$month}<br />";        
    }

}

関数の使用を本当に停止する必要がありますmysql_*。関数は非推奨です。mysqli_*どちらPDOがより適しているかわからない場合は、こちらをお読みください。

于 2012-09-10T04:56:06.150 に答える
0

月だけが必要な場合は、php で日付形式を分解する必要はありません。次のように mysql クエリで月を取得できます。

$query = "select month(date) as mont from table_name";

残りのものをチェックしてください..

于 2012-09-10T04:56:11.543 に答える
0

ストレージ変数を使用して、クエリ内で実行できます。

set @prevmonth := null;

select if(month(datefield) <> month(@prevmonth), true, false) AS new_month, @prevmonth := month(datefield), ....
FROM ...

次に、取得コードでこの新しい派生new_monthフィールドを確認するだけです。新しい月に達すると、常に 1/true になります。

注: 最初の行の比較は null @prevmonth に対して機能するため、最初の行は 0/false として出力されます。最初の行が真であることを望むかもしれませんが、それはこのすべての範囲を超えています。

于 2012-09-10T05:25:27.513 に答える