Здравствуйте, Подскажите как сделать выборку по неделям? Тесть количество записей за неделю определенного месяца, например Май. Обычно в месяце 5 недель, как это сделать ?
где смотрел? я открыл документацию и там даже есть функции с названием week в документации week, только учти, что возвращает неделю в году от 0 до 53, если надо неделю в месяце, то арифметически посчитай
В общем случае суммировать количество записей за период так: Код (Text): SELECT COUNT(*) FROM mytable GROUP BY здесь_твоё_календарное_выражение Осталось придумать выражение, уникальное каждую неделю и каждый месяц. Вот это изменяется при смене как недели так и месяца, если начало месяца случается посреди недели. Код (Text): … GROUP BY DATE_FORMAT(datefield, '%Y-%m@%u') https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format пример вычисления Код (Text): ... 2016-10-31 2016-10@44 сменился месяц 2016-11-01 2016-11@44 2016-11-02 2016-11@44 2016-11-03 2016-11@44 2016-11-04 2016-11@44 2016-11-05 2016-11@44 2016-11-06 2016-11@44 сменилась неделя 2016-11-07 2016-11@45 ... --- Добавлено --- Другой вариант уникальной группировки — набор из трех выражений. Код (Text): … GROUP BY YEAR(datefield), MONTH(datefield), WEEK(datefield, 1) --- Добавлено --- Только чуйка мне подсказывает, что недели получатся уж слишком "неравноправные". Месяц в среднем содержит 4.3 недели, то есть последняя неделя всегда короткая. Поэтому советую подумать над условиями, возможно готовая функция YEARWEEK(date,mode) подойдёт больше.
Нашел такой вариант : Код (Text): SELECT * FROM table WHERE 1 = FLOOR((DayOfMonth(date_et)-1)/7)+1 AND MONTH(date_et)=11 Но почему-то не работает
что это было? потом видимо $count = mysql_num_rows($r) ага на всякий случай приложу здесь некоторые прикольные календарные вычисления на PHP: PHP: $bom = strtotime("first day of this month"); // первый день этого месяца $bom = strtotime(date('Y-m-1')); // то же самое другими словами вот прям для топикстартера: PHP: $bom = strtotime(date('Y-m-1', $d)); // первое число месяца от указанной даты, $eom = strtotime('+1 month -1 day', $bom); // последнее число этого же месяца $monday = strtotime('-1 week', strtotime('next Monday', $d)); // понедельник той недели $lastDay = min(strtotime('+6 days', $monday), $eom); // конец недели или конец месяца, что раньше наступит $stmt = $db->prepare("SELECT * FROM table WHERE date_et BETWEEN :d1 AND :d2"); // ну или COUNT(*) - по желанию $stmt->execute([ 'd1' => date('Y-m-d', $monday), 'd2' => date('Y-m-d', $lastDay) ]); $records = $stmt->fetchAll(PDO::FETCH_ASSOC);