| |
|
|
| |
<?
$actions = array ("join", "logon", "logon_first", "forum_quest_add", "forum_answer_add", "pascal_done",
"pascal_mark", "pascal_foul", "pascal_more", "pascal_start", "gtest_start", "gtest_finish", "gtest_cancel",
"gtest_zero", "strike_page", "login_remaind", "send_email", "sms_send");
$intervals = array ("and LEFT(ActionDate, 10) = LEFT(NOW(), 10)",
"and LEFT(ActionDate, 10) = LEFT(NOW() - INTERVAL 1 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 7 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 1 MONTH, 10)",
"");
foreach ($actions as $action)
{
...
foreach ($intervals as $interval)
{
$query = "SELECT COUNT(Action) AS Logins
FROM Action
WHERE Action = '$action' $interval";
$res = $sql -> query ($query, $rows);
$row = mysql_fetch_assoc ($res);
...
}
...
}
?>
|
Вот есть код. Проблема в том, что там получается 18 * 5 = 90 запросов. Страничка уж очень долго грузит, можно ли как-нибудь оптимизировать данный код? | |
| |
|
|
| |
|
|
| |
для: XP
(20.11.2007 в 00:40)
| | | интересная тема
попробуйте запустить такие два варианта , если получится, напишите пожалста какой из них быстрее
ато не нажил я ещё больших таблиц потестить )
вот так кажется должно получиться
<html><body><table border="2px">
<?php
list($headtime, $time) = explode(chr(32), microtime());
$headtime = ($time + $headtime); # время начала
define('Z', "\n");
define('TD', '<td></td>' . Z);
define('TR', '<tr><td>' . Z);
define('TDR', '</td></tr>' . Z);
// include('');
$actions = array("join", "logon", "logon_first", "forum_quest_add",
"forum_answer_add", "pascal_done",
"pascal_mark", "pascal_foul", "pascal_more", "pascal_start",
"gtest_start", "gtest_finish", "gtest_cancel",
"gtest_zero", "strike_page", "login_remaind", "send_email",
"sms_send");
$intervals = array("and LEFT(ActionDate, 10) = LEFT(NOW(), 10)",
"and LEFT(ActionDate, 10) = LEFT(NOW() - INTERVAL 1 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 7 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 1 MONTH, 10)",
"");
for($i=0; $i<count($actions); $i++)
{
$query = 'SELECT COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[0] . ', 0)) AS Logins0,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[1] . ', 0)) AS Logins1,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[2] . ', 0)) AS Logins2,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[3] . ', 0)) AS Logins3,
COUNT(NULLIF(Action = "' . $action[$i] . '", 0)) AS Logins4
FROM Action';
$res = $sql -> query($query, $rows); //
$row = mysql_fetch_row($res);
echo TR . $action[$i] . TD . $row[0] . TD . $row[1] . TD
. $row[2] . TD . $row[3] . TD . $row[4] . TDR ;
}
// mysql_close();
list($msec,$sec) = explode(chr(32), microtime()); #время завершения
echo '<tr><td colspan="6">' . Z . '[_' . round(($sec + $msec) - $headtime, 4) . 's_]' . TDR ;
?>
</table></body></html>
|
и наверное так
<html><body><table border="2px">
<?php
list($headtime, $time) = explode(chr(32), microtime());
$headtime = ($time + $headtime); # время начала
define('Z', "\n");
define('TD', '<td></td>' . Z);
define('TR', '<tr><td>' . Z);
define('TDR', '</td></tr>' . Z);
// include('');
$actions = array("join", "logon", "logon_first", "forum_quest_add",
"forum_answer_add", "pascal_done",
"pascal_mark", "pascal_foul", "pascal_more", "pascal_start",
"gtest_start", "gtest_finish", "gtest_cancel",
"gtest_zero", "strike_page", "login_remaind", "send_email",
"sms_send");
$intervals = array("and LEFT(ActionDate, 10) = LEFT(NOW(), 10)",
"and LEFT(ActionDate, 10) = LEFT(NOW() - INTERVAL 1 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 7 DAY, 10)",
"and LEFT(ActionDate, 10) > LEFT(NOW() - INTERVAL 1 MONTH, 10)",
"");
$count = count($actions) - 1;
$query = '';
for($i=0; $i <= $count; $i++)
{
$query .= 'SELECT COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[0] . ', 0)) AS Logins0,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[1] . ', 0)) AS Logins1,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[2] . ', 0)) AS Logins2,
COUNT(NULLIF(Action = "' . $action[$i] . '" ' . $intervals[3] . ', 0)) AS Logins3,
COUNT(NULLIF(Action = "' . $action[$i] . '", 0)) AS Logins4
FROM Action
';
if ($i != $count) $query .= 'UNION ALL
';
}
$res = $sql -> query($query, $rows); // запрос
while($row = mysql_fetch_row($res))
{
echo TR . $action[$i] . TD . $row[0] . TD . $row[1] . TD
. $row[2] . TD . $row[3] . TD . $row[4] . TDR ;
}
// mysql_close();
list($msec,$sec) = explode(chr(32), microtime()); #время завершения
echo '<tr><td colspan="6">' . Z . '[_' . round(($sec + $msec) - $headtime, 4) . 's_]' . TDR ;
?>
</table></body></html>
|
| |
| |
|
|
|