Mam następujące zapytanie.Różnice w tygodniach między PHP a MySQL
SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date)
Say produkuje następujące wyniki
32 33 2012
43 34 2012
39 35 2012
17 36 2012
Teraz chcę uzyskać wszystkie rekordy w 39 tygodniu 35 z roku 2012. I nie, jednak chcą korzystać WEEK(date)=35 AND YEAR(date)=2012
w moim WHERE jak to nie wykorzystuje indeksów. Zamiast tego chciałbym znaleźć granice i stosować warunki warunkowe. Ja również nie chcę używać MIĘDZY, ponieważ mogą wystąpić błędy zaokrąglania.
Dlatego wypróbowałem następujące myślenie, że wszystko jest w porządku, ale nie uzyskaj 39 rekordów. Oczywiście MySQL i PHP działają inaczej niż tygodnie. Widzę, że MySQL WEEK() używa trybu 0, 2, 4 i 6, które wszystkie zwracają tydzień zaczynający się od niedzieli. Najlepiej, gdybym miał ten, który jest najczęściej używany przez ludzi, najważniejsze jest to, że jest taki sam jak dostarczony przez DateTime. Jak bym to zrobił? Dziękujemy
$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 obsługuje licznik tygodniowy differntly oparciu o tryb mijamy go, [patrz (data, tryb) Tydzień] (http://dev.mysql.com/doc/ refman/5.5/pl/date-and-time-functions.html # function_week), możesz także ustawić ten serwer w zmiennych systemowych. – fiz
Czy otrzymujesz mniej niż 39 rekordów? Być może twój warunek WHERE powinien być "date <=?". – BellevueBob
@fiz Widziałem, jak WEEK() miał różne tryby, ale nie był pewien, w jaki sposób to mogłoby pomóc. – user1032531