次のクエリがあります。
SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date)
次の結果が生成されるとします
32 33 2012
43 34 2012
39 35 2012
17 36 2012
2012 年の第 35 週に 39 件のレコードすべてを取得したいと考えています。ただし、WEEK(date)=35 AND YEAR(date)=2012
インデックスを使用しないため、WHERE 句では使用したくありません。代わりに、境界を見つけて条件を使用したいと考えています。丸め誤差が発生する可能性があるため、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 < ?';