скажите пожалуйста, какие таблицы надо саоздать для "истории(графиков) по часам, дням, месяцам"?
например по часам:
время - кол-во(разное) - pid (много)
00:00 - 24 - 1
02:00 - 11 - 1
04:00 - 1 - 1
и до конца дня
все это дело записывать в таблицу, для вывода в график..
вот сообразить никак не могу :unsure:
буду благодарен за любую помощь!!
я предполагаю надо создать (по часам):
id, pid, time_0, time_2, time_4, time_6, time_8, time_10, time_12, time_14, time_16, time_18, time_20, time_22
и в зависимости от реального времени, записывать в time_n, кол-во..
потом, для записи в таблицу (январь, февраль, март) по дням, что-то как-то суммировать и записать
id, pid, chislo_1, chislo_2 и т.д
так же и с годом....
Спустя 28 минут, 19 секунд (15.02.2011 - 16:04) sergeiss написал(а):
Если я тебя правильно понял, то тебе надо создать 2 поля: дата (тип "дата") и час дня (тип "целое") - либо дата ("дата") и время("время"). Плюс информационные поля и какой-то идентификатор объекта.
Тогда ты потом сможешь выбрать всё, что угодно. Как почасовые данные, так и суммарные.
Кстати говоря... Если у тебя будут еще и суммарные суточные данные, то рекомендую создать отдельную строку с данными за 25-й час, т.е. с суммой за 24 часа. Это для одного, единичного объекта.
А сумму по дням и месяцам будешь находить потом уже, во время выборки. Либо - можешь создать и сумму за месяц по единичным объектам.
Тогда ты потом сможешь выбрать всё, что угодно. Как почасовые данные, так и суммарные.
Кстати говоря... Если у тебя будут еще и суммарные суточные данные, то рекомендую создать отдельную строку с данными за 25-й час, т.е. с суммой за 24 часа. Это для одного, единичного объекта.
А сумму по дням и месяцам будешь находить потом уже, во время выборки. Либо - можешь создать и сумму за месяц по единичным объектам.
Спустя 6 минут, 8 секунд (15.02.2011 - 16:10) Michael написал(а):
Ну твоя структура мне совсем не нравится.
Определись сначала что у тебя за атомарная единица информации(событие) и какие у него характеристики.
Например продажи и нужно учитывать почасово выручку.
Сущность твоя - сумма продажи в некий час. Идентифицируется однозначным периодом и суммой.
Вот структура таблицы:
hour - число от 1 до 23 например.
И смотри насколько удобно тебе будет из такой БД выбирать данные, добавлять и т.д.
Определись сначала что у тебя за атомарная единица информации(событие) и какие у него характеристики.
Например продажи и нужно учитывать почасово выручку.
Сущность твоя - сумма продажи в некий час. Идентифицируется однозначным периодом и суммой.
Вот структура таблицы:
id summ year month hour
hour - число от 1 до 23 например.
И смотри насколько удобно тебе будет из такой БД выбирать данные, добавлять и т.д.
Спустя 4 минуты, 23 секунды (15.02.2011 - 16:15) sergeiss написал(а):
Michael
Год-месяц-день должны быть в одном поле типа "дата", иначе делать выборку за произвольный диапазон дат будет просто нереально!!!
Год-месяц-день должны быть в одном поле типа "дата", иначе делать выборку за произвольный диапазон дат будет просто нереально!!!
Спустя 4 минуты, 25 секунд (15.02.2011 - 16:19) Michael написал(а):
та то я схематически, даже день забыл.
А почему нереально - в запросе переводишь в дни и вперед
А почему нереально - в запросе переводишь в дни и вперед
Спустя 18 секунд (15.02.2011 - 16:19) uMnepaTop написал(а):
Цитата (sergeiss @ 15.02.2011 - 16:04) |
Если я тебя правильно понял, то тебе надо создать 2 поля: дата (тип "дата") и час дня (тип "целое") - либо дата ("дата") и время("время"). Плюс информационные поля и какой-то идентификатор объекта. Тогда ты потом сможешь выбрать всё, что угодно. Как почасовые данные, так и суммарные. Кстати говоря... Если у тебя будут еще и суммарные суточные данные, то рекомендую создать отдельную строку с данными за 25-й час, т.е. с суммой за 24 часа. Это для одного, единичного объекта. А сумму по дням и месяцам будешь находить потом уже, во время выборки. Либо - можешь создать и сумму за месяц по единичным объектам. |
т.е получается "25-й час" - столбец суммированый за 24 часа?
и как лучше добавлять информацию в БД в зависимости от времени?
if else? или interval? или еще как?
Спустя 9 минут, 23 секунды (15.02.2011 - 16:29) sergeiss написал(а):
Цитата (uMnepaTop @ 15.02.2011 - 17:19) |
т.е получается "25-й час" - столбец суммированый за 24 часа? |
Какой, блин, столбец??? СТРОКА!!!! Один объект за один час - одна строка (24 строки за сутки). Один объект за сутки - еще одна, другая строка, 25-я (если нужна сразу сумма за день). Об этом и я говорю, и Майкл.
Цитата (Michael @ 15.02.2011 - 17:19) |
А почему нереально - в запросе переводишь в дни и вперед |
ОК Тока куда их "переводить"? Пример - в студию!
Спустя 6 минут, 31 секунда (15.02.2011 - 16:35) Michael написал(а):
Цитата (sergeiss) |
ОК smile.gif Тока куда их "переводить"? Пример - в студию! wink.gif |
тут проскальзывало
Я сам не большой сторонник такого решения. Это больше те кто помешан на переносимости базы и запросов. Например в mysql чтобы месяц выцепить в типе дата-время в запросе надо использовать функцию MONTH(). В постгре - имеется?
Спустя 36 минут, 15 секунд (15.02.2011 - 17:12) sergeiss написал(а):
Цитата (Michael @ 15.02.2011 - 17:35) |
Например в mysql чтобы месяц выцепить в типе дата-время в запросе надо использовать функцию MONTH(). В постгре - имеется? |
Ну дык, спрашиваешь! :) Конечно есть.
date_ - поле типа date
select date_part( 'month', date_) as month, ...
Цитата (Michael @ 15.02.2011 - 17:35) |
Это больше те кто помешан на переносимости базы и запросов. |
"К терапевту"... Я считаю, что надо использовать по максимуму все возможности каждого типа БД.
Спустя 2 минуты, 55 секунд (15.02.2011 - 17:15) Michael написал(а):
sergeiss, та то что в принципе есть то понятно ... но синтаксис другой. А значит нужно лезть в запросы переписывать. Я же спрашивал о наличии именно функции MONTH().
Спустя 10 минут, 8 секунд (15.02.2011 - 17:25) sergeiss написал(а):
Ты знаешь... Если уж очень нужна функция MONTH(), то написать её - дело на 5 минут И будет она возвращать как раз "date_part( 'month', ... )" от переданного аргумента
Но в любом случае я считаю, что не надо бездумно переписывать запросы при переходе из одно БД в другую. Потому что это просто не реально и бессмысленно. Именно потому, что у каждой БД может быть своя специфика, положительная по сравнению с другими БД.
Например. Вот только отдельные различия.
В MySQL есть INSERT ... ON DUPLICATE KEY UPDATE..., а в Постгре нету.
Но зато в Постгре есть другие плюсы В частности, "на вскидку", в запросе UPDATE, INSERT или DELETE я могу написать RETURNING * (или список нужных мне полей) и сразу же, БЕЗ ДОПОЛНИТЕЛЬНЫХ ТЕЛОДВИЖЕНИЙ, получить обновленные, вставленные или удаленные данные. Такого в MySQL нет.
И вот попробуй перепиши запросы с такой спецификой из одной БД в другую (я уж не говорю о том, чтобы просто "в лоб" использовать), чтобы они работали в обеих БД. Сделаешь? Нет. Поэтому и не надо делать универсальные запросы.
Но в любом случае я считаю, что не надо бездумно переписывать запросы при переходе из одно БД в другую. Потому что это просто не реально и бессмысленно. Именно потому, что у каждой БД может быть своя специфика, положительная по сравнению с другими БД.
Например. Вот только отдельные различия.
В MySQL есть INSERT ... ON DUPLICATE KEY UPDATE..., а в Постгре нету.
Но зато в Постгре есть другие плюсы В частности, "на вскидку", в запросе UPDATE, INSERT или DELETE я могу написать RETURNING * (или список нужных мне полей) и сразу же, БЕЗ ДОПОЛНИТЕЛЬНЫХ ТЕЛОДВИЖЕНИЙ, получить обновленные, вставленные или удаленные данные. Такого в MySQL нет.
И вот попробуй перепиши запросы с такой спецификой из одной БД в другую (я уж не говорю о том, чтобы просто "в лоб" использовать), чтобы они работали в обеих БД. Сделаешь? Нет. Поэтому и не надо делать универсальные запросы.
Спустя 12 часов, 54 минуты, 47 секунд (16.02.2011 - 06:19) uMnepaTop написал(а):
Вот не поверите.. С таблицей разобрался вроде как, а вот график никак не могу сделать, часов этак 8 сижу и дуплюсь........... :ph34r:
помогите пожалуйста.... апи гугла мучал! мучал еще всякие разные апи.. ничего не получается(((
CREATE TABLE IF NOT EXISTS `sh_hours` (
`id` int(11) NOT NULL auto_increment,
`srv_id` int(11) NOT NULL,
`date` date NOT NULL,
`time` int(2) NOT NULL,
`players` int(11) NOT NULL,
`max_players` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=49 ;
--
-- Дамп данных таблицы `sh_hours`
--
INSERT INTO `sh_hours` (`id`, `srv_id`, `date`, `time`, `players`, `max_players`) VALUES
(11, 1, '2011-02-16', 10, 3, 33),
(2, 1, '2011-02-15', 1, 7, 33),
(3, 1, '2011-02-15', 2, 11, 33),
(4, 1, '2011-02-15', 3, 3, 33),
(5, 1, '2011-02-15', 4, 0, 33),
(6, 1, '2011-02-15', 5, 31, 33),
(7, 1, '2011-02-15', 6, 31, 33),
(8, 1, '2011-02-15', 7, 24, 33),
(9, 1, '2011-02-15', 8, 16, 33),
(10, 1, '2011-02-15', 9, 5, 33),
(12, 1, '2011-02-15', 11, 0, 33),
(13, 1, '2011-02-15', 12, 0, 33),
(14, 1, '2011-02-15', 13, 0, 33),
(15, 1, '2011-02-15', 14, 0, 33),
(16, 1, '2011-02-15', 15, 0, 33),
(17, 1, '2011-02-15', 16, 5, 33),
(18, 1, '2011-02-15', 17, 5, 33),
(19, 1, '2011-02-15', 19, 7, 33),
(20, 1, '2011-02-15', 18, 9, 33),
(21, 1, '2011-02-15', 20, 1, 33),
(22, 1, '2011-02-15', 21, 11, 33),
(23, 1, '2011-02-15', 22, 17, 33),
(24, 1, '2011-02-15', 23, 21, 33),
(1, 1, '2011-02-15', 0, 1, 33),
(25, 2, '2011-02-16', 10, 5, 27),
(26, 2, '2011-02-15', 1, 9, 27),
(27, 2, '2011-02-15', 2, 1, 27),
(28, 2, '2011-02-15', 3, 3, 27),
(29, 2, '2011-02-15', 4, 5, 27),
(30, 2, '2011-02-15', 5, 6, 27),
(31, 2, '2011-02-15', 6, 5, 27),
(32, 2, '2011-02-15', 7, 11, 27),
(33, 2, '2011-02-15', 8, 18, 27),
(34, 2, '2011-02-15', 9, 16, 27),
(35, 2, '2011-02-15', 11, 10, 27),
(36, 2, '2011-02-15', 12, 1, 27),
(37, 2, '2011-02-15', 13, 0, 27),
(38, 2, '2011-02-15', 14, 0, 27),
(39, 2, '2011-02-15', 15, 0, 27),
(40, 2, '2011-02-15', 16, 10, 27),
(41, 2, '2011-02-15', 17, 24, 27),
(42, 2, '2011-02-15', 19, 27, 27),
(43, 2, '2011-02-15', 18, 26, 27),
(44, 2, '2011-02-15', 20, 26, 27),
(45, 2, '2011-02-15', 21, 25, 27),
(46, 2, '2011-02-15', 22, 12, 27),
(47, 2, '2011-02-15', 23, 14, 27),
(48, 2, '2011-02-15', 0, 15, 27);
помогите пожалуйста.... апи гугла мучал! мучал еще всякие разные апи.. ничего не получается(((
Спустя 4 часа, 10 минут, 6 секунд (16.02.2011 - 10:30) sergeiss написал(а):
Для построения графика тебе нужно GD2 использовать из ПХП.
Спустя 4 часа, 48 минут, 43 секунды (16.02.2011 - 15:18) uMnepaTop написал(а):
ну так это понятно, только я не пойму, как сделать выборку по часам, чтобы при определенном времени, показывало определенное кол-во players на оси
вот есть например:
вот есть например:
$query = mysql_query("SELECT * FROM `sh_hours` WHERE `srv_id` = '{$_GET['id']}'");
$row = mysql_fetch_assoc($query);
for($i=0; $i <= $row['max_players']; $i++)
{
$line_y[] = $i;
}
// max оси Y
print_r($line_y);
// max оси Х
print_r(array('00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'));
Спустя 22 минуты, 40 секунд (16.02.2011 - 15:41) sergeiss написал(а):
Так в чем проблема-то... Сделать правильную выборку из БД или построить график по известным данным?
Спустя 5 минут, 27 секунд (16.02.2011 - 15:46) uMnepaTop написал(а):
получается одно из другого вытекает, потому, что я не могу сделать правильную выборку, вследствии не получается сделать график... может график правильно делал, но выборка была неправильная...
Спустя 12 минут, 46 секунд (16.02.2011 - 15:59) uMnepaTop написал(а):
не могу понять, как сделать выборку, чтобы date("G"); <=$row['time'];
Спустя 20 минут, 9 секунд (16.02.2011 - 16:19) sergeiss написал(а):
Цитата (uMnepaTop @ 16.02.2011 - 16:59) |
не могу понять, как сделать выборку, чтобы date("G"); <=$row['time']; |
А на словах это если описать, то как будет?
Спустя 1 час, 5 минут, 38 секунд (16.02.2011 - 17:25) uMnepaTop написал(а):
В общем я уже нихрена не понимаю и объяснить нифига не могу.......((
вот что примерно должно получится, но не получается:
вот что примерно должно получится, но не получается:
Спустя 37 минут, 7 секунд (16.02.2011 - 18:02) sergeiss написал(а):
uMnepaTop - так что ты делаешь-то????? Твой код на предыдущей странице - полная абстракция.
Спустя 2 часа, 14 минут, 17 секунд (16.02.2011 - 20:16) uMnepaTop написал(а):
Цитата (sergeiss @ 16.02.2011 - 18:02) |
uMnepaTop - так что ты делаешь-то????? Твой код на предыдущей странице - полная абстракция. |
ну вот например:
$config['server'] = "localhost";
$config['user'] = "root";
$config['pass'] = "vertrigo";
$config['db'] = "graph";
$database = mysql_connect($config['server'], $config['user'], $config['pass']);
$select_db = mysql_select_db($config['db'], $database);
$date = date("H");
$query = mysql_query("SELECT * FROM `sh_hours` WHERE `srv_id` = '{$_GET['id']}' AND `time` < '{$date}'");
while ($row = mysql_fetch_assoc($query))
{
$DATA=Array();
for ($i=0; $i<$date; $i++)
{
$DATA[0][]=$row['max_players'];
$DATA["x"][]=$i;
}
// Задаем изменяемые значения #######################################
// Размер изображения
$W=500;
$H=200;
// Отступы
$MB=20; // Нижний
$ML=8; // Левый
$M=5; // Верхний и правый отступы.
// Они меньше, так как там нет текста
// Ширина одного символа
$LW=imagefontwidth(2);
// Подсчитаем количество элементов (точек) на графике
$count=count($DATA[0]);
if ($count==0) $count=1;
// Сглаживаем графики ###############################################
if ($_GET["smooth"]==1) {
// Добавим по две точки справа и слева от графиков. Значения в
// этих точках примем равными крайним. Например, точка если
// y[0]=16 и y[n]=17, то y[1]=16 и y[-2]=16 и y[n+1]=17 и y[n+2]=17
// Такое добавление точек необходимо для сглаживания точек
// в краях графика
for ($j=0;$j<3;$j++) {
$DATA[$j][-1]=$DATA[$j][-2]=$DATA[$j][0];
$DATA[$j][$count]=$DATA[$j][$count+1]=$DATA[$j][$count-1];
}
// Сглаживание графики методом усреднения соседних значений
for ($i=0;$i<$count;$i++) {
for ($j=0;$j<3;$j++) {
$DATA[$j][$i]=($DATA[$j][$i-1]+$DATA[$j][$i-2]+
$DATA[$j][$i]+$DATA[$j][$i+1]+
$DATA[$j][$i+2])/5;
}
}
}
// Подсчитаем максимальное значение
$max=$row['max_players'];
for ($i=0;$i<$count;$i++) {
$max=$max<$DATA[0][$i]?$DATA[0][$i]:$max;
$max=$max<$DATA[1][$i]?$DATA[1][$i]:$max;
$max=$max<$DATA[2][$i]?$DATA[2][$i]:$max;
}
// Увеличим максимальное значение на 10% (для того, чтобы столбик
// соответствующий максимальному значение не упирался в в границу
// графика
$max=intval($max+($max/50));
// Количество подписей и горизонтальных линий
// сетки по оси Y.
$county=$row['max_players']/3;
// Работа с изображением ############################################
// Создадим изображение
$im=imagecreate($W,$H);
// Цвет фона (белый)
$bg[0]=imagecolorallocate($im,255,255,255);
// Цвет задней грани графика (светло-серый)
$bg[1]=imagecolorallocate($im,231,231,231);
// Цвет левой грани графика (серый)
$bg[2]=imagecolorallocate($im,212,212,212);
// Цвет сетки (серый, темнее)
$c=imagecolorallocate($im,184,184,184);
// Цвет текста (темно-серый)
$text=imagecolorallocate($im,136,136,136);
// Цвета для линий графиков
$bar[2]=imagecolorallocate($im,191,65,170);
$bar[0]=imagecolorallocate($im,161,155,0);
$bar[1]=imagecolorallocate($im,65,170,191);
$text_width=0;
// Вывод подписей по оси Y
for ($i=1;$i<=$county;$i++) {
$strl=strlen(($max/$county)*$i)*$LW;
if ($strl>$text_width) $text_width=$strl;
}
// Подравняем левую границу с учетом ширины подписей по оси Y
$ML+=$text_width;
// Посчитаем реальные размеры графика (за вычетом подписей и
// отступов)
$RW=$W-$ML-$M;
$RH=$H-$MB-$M;
// Посчитаем координаты нуля
$X0=$ML;
$Y0=$H-$MB;
$step=$RH/$county;
// Вывод главной рамки графика
imagefilledrectangle($im, $X0, $Y0-$RH, $X0+$RW, $Y0, $bg[1]);
imagerectangle($im, $X0, $Y0, $X0+$RW, $Y0-$RH, $c);
// Вывод сетки по оси Y
for ($i=1;$i<=$county;$i++) {
$y=$Y0-$step*$i;
imageline($im,$X0,$y,$X0+$RW,$y,$c);
imageline($im,$X0,$y,$X0-($ML-$text_width)/4,$y,$text);
}
// Вывод сетки по оси X
// Вывод изменяемой сетки
for ($i=0;$i<$count;$i++) {
imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count),$Y0,$c);
imageline($im,$X0+$i*($RW/$count),$Y0,$X0+$i*($RW/$count),$Y0-$RH,$c);
}
// Вывод линий графика
$dx=($RW/$count)/2;
$pi=$Y0-($RH/$max*$DATA[0][0]);
$po=$Y0-($RH/$max*$DATA[1][0]);
$pu=$Y0-($RH/$max*$DATA[2][0]);
$px=intval($X0+$dx);
for ($i=1;$i<$count;$i++) {
$x=intval($X0+$i*($RW/$count)+$dx);
$y=$Y0-($RH/$max*$DATA[0][$i]);
imageline($im,$px,$pi,$x,$y,$bar[0]);
$pi=$y;
$y=$Y0-($RH/$max*$DATA[1][$i]);
imageline($im,$px,$po,$x,$y,$bar[1]);
$po=$y;
$y=$Y0-($RH/$max*$DATA[2][$i]);
imageline($im,$px,$pu,$x,$y,$bar[2]);
$pu=$y;
$px=$x;
}
// Уменьшение и пересчет координат
$ML-=$text_width;
// Вывод подписей по оси Y
for ($i=1;$i<=$county;$i++) {
$str=($max/$county)*$i;
imagestring($im,2, $X0-strlen($str)*$LW-$ML/4-2,$Y0-$step*$i-
imagefontheight(2)/2,$str,$text);
}
// Вывод подписей по оси X
$prev=100000;
$twidth=$LW*strlen($DATA["x"][0])+6;
$i=$X0+$RW;
while ($i>$X0) {
if ($prev-$twidth>$i) {
$drawx=$i-($RW/$count)/2;
if ($drawx>$X0) {
$str=$DATA["x"][round(($i-$X0)/($RW/$count))-1];
imageline($im,$drawx,$Y0,$i-($RW/$count)/2,$Y0+5,$text);
imagestring($im,2, $drawx-(strlen($str)*$LW)/2, $Y0+7,$str,$text);
}
$prev=$i;
}
$i-=$RW/$count;
}
header("Content-Type: image/png");
// Генерация изображения
ImagePNG($im);
imagedestroy($im);
}
Из документации.. Вот я не понимаю, как пусть линию "players", в зависимости от времени..
Спустя 41 минута, 28 секунд (16.02.2011 - 20:58) sergeiss написал(а):
Цитата (uMnepaTop @ 16.02.2011 - 21:16) |
Вот я не понимаю, как пусть линию "players", в зависимости от времени.. |
Вот этот вопрос не понял.
И еще не понял - у тебя на картинке прямые линии, а должны быть "ломаные"?
И еще. У тебя тут в живом виде заложена возможность SQL-инъекции, когда ты используешь $_GET['id'] прямо в запросе.
Спустя 2 минуты, 31 секунда (16.02.2011 - 21:00) uMnepaTop написал(а):
гет это для теста просто.
Цитата |
Вот я не понимаю, как пусть линию "players", в зависимости от времени.. |
не понимаю, как пусть кривую линию.. цифру (players) в зависимости от time (часов)
надо точку по Х поставить в зависимости от time
Спустя 30 минут, 57 секунд (16.02.2011 - 21:31) sergeiss написал(а):
Цитата (uMnepaTop @ 16.02.2011 - 22:00) |
не понимаю, как пусть кривую линию.. цифру (players) в зависимости от time (часов) надо точку по Х поставить в зависимости от time |
Вот чё хошь делай... Так я и не понял самого главного.
То ли ты хочешь, чтобы твой график периодически менялся, например раз в час. То ли просто не понимаешь, как его пострить (хотя твой скрипт смотрится очень неплохо - но во все тонкости его работы я не вникал)?
Спустя 1 день, 20 часов, 1 минута, 22 секунды (18.02.2011 - 17:33) Guest написал(а):
Вроде разобрался.. И с API Google тоже.
Теперь немного другой вопросец. Как сделать "недельную" историю?
А точнее, как сделать выборку по последним 7 дням?
Теперь немного другой вопросец. Как сделать "недельную" историю?
А точнее, как сделать выборку по последним 7 дням?
Спустя 42 секунды (18.02.2011 - 17:33) uMnepaTop написал(а):
Забыл авторизоваться...
Только еще не разобрался, как суммировать "часовые" и вписать в "дневную (недельную)" таблицу :\
Только еще не разобрался, как суммировать "часовые" и вписать в "дневную (недельную)" таблицу :\
Спустя 2 часа, 56 минут, 41 секунда (18.02.2011 - 20:30) sergeiss написал(а):
Цитата (uMnepaTop @ 18.02.2011 - 18:33) |
Только еще не разобрался, как суммировать "часовые" и вписать в "дневную (недельную)" таблицу |
Построение графика будет принципиально такое же.
А при выборке данных используй GROUP BY так, чтобы как раз суммировать за день или неделю. Подумай сам для начала.
Спустя 1 час, 24 минуты, 15 секунд (18.02.2011 - 21:54) uMnepaTop написал(а):
Ну вот например:
За сутки. За 7 дней так же конечно :)
SELECT AVG(players) as `summa` FROM `sh_hours` WHERE `date` >= subdate(curdate(), interval 1 day)
За сутки. За 7 дней так же конечно :)