Моя таблица - это, в основном, журнал доступа, который записывает каждый хит страницы. То, что я хочу показать, - это количество просмотров страниц в неделю для каждой из недель года, сравнивая год за годом (так что у меня есть неделя 1 2013, 2014, 2015, неделя 2 2013, 2014 и т. Д.). Я в настоящее время достижения этого, просто запрашивая все записи, и позволяя PHP делать тяжелую работу следующим образом:Количество записей, сгруппированных по неделям года
$result=$db->query("select `time` from accessTracking where `uID` is not null and `time`>1357030861 order by `time`");
foreach($result as $r){
$y=date("Y",$r['time']);
$w=ltrim(date("W",$r['time']),'0');
$accessArray[$w][$y]++;
}
В то время как она работает, она занимает твердые 7 секунд, чтобы загрузить страницу она отображает график на и Я предполагаю, что есть не только лучший способ с PHP, но даже более того с MySQL (это то, что я ищу, но я возьму все, что уберет время загрузки страницы и сделает все это более эффективным.
Итак, с этим, лучшее, что я придумал это:
select weekofyear(`time`) as week, count(*) as count from `accessTracking` where `uID` is not null group by week
Похоже, что он будет работать, поскольку он возвращает 53 строки с столбцом «неделя» от 1-52 и столбцом «count» со случайными значениями в них от 2 до 1100. Проблема в том, что цифры должны быть выше так как самая высокая неделя у меня составляет около 27 000 обращений, а первая запись, возвращаемая в этом запросе, является нулевым значением «неделя» со значением «count» около 398 000. Это говорит мне, что для большинства записей это не вычисляет значение weekofyear().
Я предполагаю, что в конце я буду считать это отдельными запросами на каждый год, так как может быть слишком много, чтобы вернуть год, номер недели и счет, все сгруппированы так, как я хочу. Но кто знает!
Это не должно быть «слишком много», чтобы добавить дополнительную группировку в год, и я считаю, что вы делаете это правильно. Я не знаю достаточно о функции 'weekofyear()', чтобы рассуждать об этом. – shawnt00
Фред, таблица не проиндексирована, но я не уверен, что здесь будет очень много полезной информации, мы на самом деле не ищем и не сортируем информацию. Каждая запись должна быть проанализирована, а затем отсортирована после этого. Пагинация действительно не является вариантом, так как окончательный набор результатов (для использования на странице, где отображаются данные) - это только количество записей за каждую неделю за каждый год, а не самих записей. Поэтому, если бы вы хотели отображать результаты за последние три полных года, у вас было бы всего 156 записей. Там не так много. – Patrick
Я удалил свой комментарий об этом Патрике; Я так много думал и был удален, прежде чем вы отправили свой комментарий после. См. Ответы ниже. Однако индексирование поможет * немного *. Гордон гораздо более совершенен в SQL, чем я. –