|
|
|
|
|
для: Loki
(30.04.2005 в 13:15)
| | А... вы можете использовать
<?php
$sql="INSERT INTO ttt SELECT count(id_ip) AS hits FROM ip
WHERE systems != 'none' AND
systems != 'robot_yandex' AND
systems != 'robot_google' AND
systems != 'robot_rambler' AND
systems != 'robot_aport' AND
systems != 'robot_msn' AND
$tmp1
$tmp2
GROUP BY ip";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.04.2005 в 13:05)
| | Сейчас это выглядит так:
<?
if ($begin==0) $begin=(intval((time()-$date['data'])/3600/24)+1);
for ($i=$begin; $i>$end; $i--)
{
if($begin == 0) $tmp2 = "";
else
{
$tmp2 = " AND putdate >= DATE_FORMAT( NOW( ) , '%Y-%m-%d 23:59:59' ) - INTERVAL ".$i." DAY ";
$tmp1 = " putdate < DATE_FORMAT( NOW( ) , '%Y-%m-%d 23:59:59' ) - INTERVAL ".($i-1)." DAY ";
}
$sql="CREATE TEMPORARY TABLE ttt SELECT count(id_ip) AS hits FROM ip
WHERE systems != 'none' AND
systems != 'robot_yandex' AND
systems != 'robot_google' AND
systems != 'robot_rambler' AND
systems != 'robot_aport' AND
systems != 'robot_msn' AND
$tmp1
$tmp2
GROUP BY ip";
mysql_query($sql);
}
?>
|
То есть мы явным образом указываем что результаты запроса надо поместить во временную таблицу. А если запрос на создание таблицы вынести из цикла, то выбранные данные будут в нее помещаться? | |
|
|
|
|
|
|
|
для: Loki
(30.04.2005 в 12:54)
| | Хм... чего-то не очень понял, что имеется ввиду? | |
|
|
|
|
|
|
|
для: cheops
(30.04.2005 в 00:35)
| | скорее всего обнуляю... а как можно запросу указать куда надо помещать результаты? | |
|
|
|
|
|
|
|
для: Loki
(30.04.2005 в 00:27)
| | А вы его CREATE обнуляете или создаёте а потом в цикле уже не пользуетесь CREATE? | |
|
|
|
|
|
|
|
для: cheops
(29.04.2005 в 23:47)
| | В общем, споткнулся я там, где и ожидал: выборка во временную таблицу происходит в цикле (последовательно за каждый день). Насколько я понял, временная таблица при этом каждый раз обнуляется. Как сделать запрос выбирающий данные из таблицы ip и добавляющий их во временную таблицу? | |
|
|
|
|
|
|
|
для: Loki
(29.04.2005 в 23:12)
| | HEAP одна на всех клиентов, другое дело, администраторов, просматривающих статистику тоже не 200 человек в минуту :))), а временная таблица создаётся для каждого клиента и в оперативной памяти, т.е. при неаккуратном программировании или при намеренном зловредной коде можно положить сервер хост-провайдера только открыванием новых страниц браузера, причём очень быстро.
Хотя HEAP тоже может быть запрещён - ещё не проверял... нужно будет попробовать. Так вот HEAP создаётся одна на всех - это полноценная таблица, только в памяти... по большому счёту нам даже не нужно, чтобы это была таблица типа HEAP так как в принципе не очень она и большая и вычисления не страшниые - можно обычную таблицу создать и чистить её перед каждым запросом (всё равно HEAP тоже чистить придётся).
PS Для того, чтобы создать таблицу HEAP в параметрах таблицы следует указать тип
CREATE TABLE ttt (
// Опеределение таблицы
) TYPE=HEAP
|
| |
|
|
|
|
|
|
|
для: cheops
(29.04.2005 в 23:01)
| | А в чем грабли? Почему heap - можно а просто временные - нет? Ну и соответственно вопрос: как их создавать? | |
|
|
|
|
|
|
|
для: Loki
(29.04.2005 в 13:35)
| | Чёрт, а ну нас на хостинге временные таблицы запрещено создавать... в принципе правильно, с ними делов наделать можно... подозреваю, что так у многих. Вот вам и трудности :))) надо подумать как бы обойти, может в HEAP писать... | |
|
|
|
|
|
|
|
для: cheops
(29.04.2005 в 12:19)
| | Блин... Уже сделал и уже работает... а как же трудности?:)
<?
// Заголовок страницы
include "topcounter.php";
$sql="CREATE TEMPORARY TABLE ttt SELECT count(id_ip) AS hits FROM ip
WHERE systems != 'none' AND
systems != 'robot_yandex' AND
systems != 'robot_google' AND
systems != 'robot_rambler' AND
systems != 'robot_aport' AND
putdate >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 1 DAY
GROUP BY ip";
$sql2="SELECT hits, count(hits) AS hits2 FROM ttt GROUP BY hits ORDER BY hits";
mysql_query($sql);
$res = mysql_query($sql2);
while($deep = mysql_fetch_array($res))
{
echo $deep['hits']."-".$deep['hits2']."<br>";
} // Включаем завершение страницы
include "bottomcounter.php";
?>
|
Вот этот код выдает статистику глубины посещений за сегодняшний день. Сегодня все это причешу и добавлю цикл вызывающий статистику за предыдущие дни (наверное, на этом этапе появятся грабли:). Ну и выложу;) | |
|
|
|
|