次のクエリがあります。PHPとMySQLの週の相違点
SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date)
はそれが私は今、私は、しかし、それのように私のWHERE句でWEEK(date)=35 AND YEAR(date)=2012
を使用したくない2012年の週35内のすべての39件のレコードを取得したい以下のような結果に
32 33 2012
43 34 2012
39 35 2012
17 36 2012
を生成言いますインデックスを利用しません。代わりに、境界を見つけて条件文を使用したいと考えています。また、丸め誤差が発生する可能性があるため、BETWEENを使用したくありません。
私は次のように考えてみてください。しかし、すべてが良いですが、39レコードは得られません。明らかに、MySQLとPHPは数週間で別々に取引を行う。私は、MySQL WEEK()がモード0、2、4、6を利用し、すべてが日曜日から始まる週を返すことが分かります。理想的には、私は人が最もよく使うものを持っていますが、最も重要なのは、それがDateTimeによって提供されるのと同じことです。どうすればいい?ありがとうございます
$w=35;$y=2012; //Given
$w=sprintf('%02d',$w); //Make sure it is two digits
$date = new DateTime($y.'W'.$w);
$d1=$date->format('Y-m-d');
$date->add(new DateInterval('P1W'));
$d2=$date->format('Y-m-d');
$sql='SELECT * FROM myTable WHERE date >= ? AND date < ?';
MySQLはdifferntlyあなたがそれを渡すモードに基づいて週数を処理し、(http://dev.mysql.com/doc/ [週(日付、モード)を参照してください] refman/5.5/en/date-and-time-functions.html#function_week)、システム変数でこのサーバー全体を設定することもできます。 – fiz
39件未満のレコードがありますか?おそらくWHERE条件は 'date <=? 'でなければなりません。 – BellevueBob
@fiz WEEK()がどのように異なったモードを持っていたのか分かりましたが、どのように役立つのか分かりませんでした。 – user1032531