Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблема с запросом к БД

Сообщения:  [1-10]   [11-16] 

 
 автор: hk416   (14.03.2012 в 20:17)   письмо автору
 
   для: Valick   (11.03.2012 в 23:38)
 

Извиняюсь, что вовремя не ответил, код ваш обязательно изучу, просто то что я написал, по заданию нужно только 1 раз,и благо работает отменно, ваш код изучу, так как опыт всегда нужно набирать. А писать дополнительно действительно ничего не нужно потому что все уже и так есть.

С уважением к вам и вашему труду HK416 !!!

  Ответить  
 
 автор: Valick   (11.03.2012 в 23:38)   письмо автору
 
   для: hk416   (10.03.2012 в 12:25)
 

вариант предложенный мной выше я отправил в "долгий ящик"
придумал другой вариант и вот что получилось

<?php
// устанавливаем переменные
$p=7// интервал
$r="minute"// размерность
$date date_create('2011-12-01 00:00:00'); // дата начала периода
$stop date_create('2011-12-01 00:29:00'); // дата конца периода
// подключение к базе данных
include('connect.php');
// создаем временную таблицу в оперативной памяти
$query="CREATE TEMPORARY TABLE
            `shcala` (
            `s_shcala` TIMESTAMP NOT NULL
            )ENGINE = MEMORY"
;
$res=mysql_query($query) or die(mysql_error());
// заполняем временную таблицу данными (шкала выборки)
do{
$query="INSERT INTO `shcala` (s_shcala) VALUES('{$date->format('Y-m-d H:i:s')}')";
$res=mysql_query($query) or die(mysql_error());
date_add($datedate_interval_create_from_date_string($p.$r));
} while(
$date <= $stop);

$query="SELECT COUNT(v.reg_date) c, v.s_shcala s, v.s_shcala + INTERVAL $p-1 $r n
        FROM
        (SELECT * 
            FROM `shcala` 
            LEFT JOIN `regs` 
                ON s_shcala <= reg_date AND reg_date < s_shcala + INTERVAL 
$p $r) v
            GROUP BY v.s_shcala"
;
$res=mysql_query($query) or die(mysql_error());
if(
$res){
    if(
mysql_num_rows($res)>0){
        while(
$a=mysql_fetch_assoc($res)){
            if(
$a[n]>$stop->format('Y-m-d H:i:s')) $a[n]=$stop->format('Y-m-d H:i:s');
            echo 
$a[s]." - ".$a[n]." количество за данный отрезок времени ".$a[c]."<br />";
        }
    }else{
        echo 
"База данных не содержит записи в указанный промежуток времени.<br />";
    }
}else{
    echo 
"Ошибка выполнения запроса к базе данных: ".mysql_error()."<br />";
}
?>

пробуйте, тестируйте
а то набивать толстую базу, для выборки например за 5 лет, с периодом в 3 месяца сил уже нет
можно еще добавить ограничения на диапазон выборки, что бы нельзя было указать диапазон больше чем реальный в БД, и на размерность, чтобы нельзя было указать допустим выборку за 10 лет, c периодичностью в одну секунду, а то хостер огорчит :)
___
надеюсь вы не ушли с форума в поисках форума покруче :)
а то получится зря старался :)
задача достаточно узконаправлена, вряд ли кому кроме вас понадобится
___
эх... видать зря, тогда и логику заполнения временной таблицы нет смысла дорабатывать :(

  Ответить  
 
 автор: Valick   (10.03.2012 в 14:58)   письмо автору
 
   для: hk416   (10.03.2012 в 12:25)
 

нет именно по серверам у меня книг нет.
а по поводу кода, осталось доработать вывод, чтобы связать промежутки со значениями из базы

  Ответить  
 
 автор: hk416   (10.03.2012 в 12:25)   письмо автору
 
   для: Valick   (10.03.2012 в 01:27)
 

Окей, и код изучим и на Шарлиз Терон в который раз посмотрим ))) Я спросить у вас хотел, а есть ли какие нибудь книги или информационные ресурсы посвященные высоким нагрузкам на серверы и их базы данных?

  Ответить  
 
 автор: Valick   (10.03.2012 в 01:27)   письмо автору
 
   для: hk416   (09.03.2012 в 23:00)
 

блин, время ночь, спать хочу нереально,
а по телеку "Сладкий ноябрь", а выключить рука не поднимается

  Ответить  
 
 автор: Valick   (09.03.2012 в 23:02)   письмо автору
 
   для: hk416   (09.03.2012 в 23:00)
 

да, сорри, забыл что цикл с нуля :)
тут вот еще в чем морковка
запросы в цикле - это большая нагрузка на сервер mysql
если клиент один, то еще ничего, а если выборку проводят одновременно несколько десятков клиентов, то "вешалка"
сейчас думаю как организовать это одним запросом
с группировкой по часам и минутам в принципе знаю как сделать, теперь думаю как организовать интервалы
___
попробуйте этот код поставив свои значения интервала
код работает капелюшечку не так как вы хотели, но мне кажется такой подход более грамотный
возможно результат вас устроит

<?php
include('connect.php'); // подключение к базе данных
$start="2011-12-01 00:01:00";
$end="2011-12-01 00:12:00";
$minute=3// интервал в минутах
$sec=$minute*60// интервал в секундах
$query="SELECT COUNT(*) t, min(reg_date) start, max(reg_date) end
            FROM regs
            WHERE reg_date BETWEEN '
$start' AND '$end'
            GROUP BY FLOOR(UNIX_TIMESTAMP(reg_date)/
$sec)";
$res=mysql_query($query); // or die(mysql_error());
if($res){
    if(
mysql_num_rows($res)>0){
        while(
$a=mysql_fetch_assoc($res)){
            echo 
"Минимальное ".$a[start]." и максимальное ".$a[end]." значения времени в заданном промежутке <br />";
            echo 
"Общее количество пользователей за выбранный промежуток времени: {$a[t]} <br />";
        }
    }else{
        echo 
"База данных не содержит записи в указанный промежуток времени.<br />";
    }
}else{
    echo 
"Ошибка выполнения запроса к базе данных: ".mysql_error()."<br />";
}
?>

  Ответить  
 
 автор: hk416   (09.03.2012 в 23:00)   письмо автору
 
   для: Valick   (09.03.2012 в 19:17)
 

замечание по логике кода
у вас не учитываются первые 10 минут


Проверил все работает, тем более в цикле 1-й раз задается отрезок от 0 до 10 минут ))) Я уж испугался что ошибка есть, на самом деле все правильно работает.

  Ответить  
 
 автор: Valick   (09.03.2012 в 19:17)   письмо автору
 
   для: hk416   (09.03.2012 в 18:38)
 

Интересно почему на этом форуме нельзя удалять сообщения?:))
фишка такая :)
---
удалять нельзя, но есть маленький секрет, можно редактировать пока не ответили, и редактировать до одного любого символа, обычно ставится тире
__
замечание по логике кода
у вас не учитываются первые 10 минут

  Ответить  
 
 автор: hk416   (09.03.2012 в 18:38)   письмо автору
 
   для: Valick   (09.03.2012 в 16:47)
 

Уважаемый Valick, я перед вами извиняюсь, оказывается мой скрипт, работает. Я дурень ошибся с данными таблицы, в общем большое вам спасибо за помощь!!! Интересно почему на этом форуме нельзя удалять сообщения?:))

С уважением к вам и вашему труду HK416 !!!

  Ответить  
 
 автор: hk416   (09.03.2012 в 18:26)   письмо автору
 
   для: Valick   (09.03.2012 в 16:47)
 

Уважаемый Valick, я понимаю что вы бы эту программу написали бы по другому, просто мне нужна ваша помощь, я не понимаю почему мой скрипт, моё так сказать детище, не пашет, в общем вот он. $i<(6*24*2) это типа сколько 10 минутных отрезков надо пройти за 2 дня, от даты '2009-09-21 00:00:00'.


for($i=0;$i<(6*24*2);$i++){
$time1=$time2=0;
$time1=10*$i;
$time2=$time1+10;

$zap="SELECT COUNT(*) FROM regs WHERE reg_date >=('2009-09-21 00:00:00' + INTERVAL '$time1' MINUTE) AND reg_date < ('2009-09-21 00:00:00' + INTERVAL '$time2' MINUTE)"; 

$dev = mysql_query($zap);
$a=mysql_result($dev, 0, 0);
echo "$a <br>";

}


С уважением к вам и вашему труду HK416 !!!

  Ответить  

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования