我有两个领域,我知道过程妓女,但我不知道如何改善他们。如何优化这些查询?
有问题的2个地方在这里显示
以及相应的查询
区1
$nresult = mysql_query("SELECT time
FROM log
ORDER BY time
LIMIT 1") or die(mysql_error);
$nr = mysql_fetch_assoc($nresult);
$aresult = mysql_query("SELECT *
FROM log") or die(mysql_error);
$an = mysql_num_rows($aresult);
$aresult = mysql_query("SELECT AVG(players)
FROM log") or die(mysql_error);
$ap = mysql_fetch_assoc($aresult);
$average = round($an/((time()-$nr['time'])/60/60), 2);
echo "<p class=\"tf2\"><span>{$an}</span> items since " . date("F j, Y", $nr['time']) . " at " . date("g:i a", $nr['time']) . ".<br /><span>" . $average . "</span> items received per hour (<span>" . round($average/$ap['AVG(players)'], 2) . "</span>/player/hour).<br />Showing <span>{$_SESSION['limit']}</span> items per page.</p>";
区2
if (!empty($_GET['s']) && !empty($_GET['t']) && !empty($_GET['m'])&& !empty($_GET['q'])) {
if ($_GET['m'] != 'all') {
$m = "AND method = {$_GET['m']}";
}
else {
$m = '';
}
if ($_GET['q'] != 'all') {
$q = "AND quality_id = {$_GET['q']}";
}
else {
$q = '';
}
if ($_GET['s'] == ' ') {
$s = '1=1';
}
else {
$s = "{$_GET['t']} LIKE '%" . mysql_real_escape_string($_GET['s']) . "%'";
}
$num_result = mysql_query("SELECT *
FROM log
LEFT JOIN item_definition
on log.item = item_definition.item_definition_desc
LEFT JOIN method
on log.method = method.method_id
LEFT JOIN item
on item_definition.item_definition_id = item.item_id
LEFT JOIN server
on log.server = server.ip
LEFT JOIN quality
on log.quality = quality.quality_id
WHERE {$s}
{$m}
{$q}")
or die(mysql_error());
}
else {
$num_result = mysql_query("SELECT *
FROM log") or die (mysql_error());
}
$total = mysql_num_rows($num_result);
echo "<center>" . $total . " results</center><br />";
活页是这里http://www.tf2items.711clan.net/
正如你所看到的,它需要的时候它加载一个良好的金额。
任何提示将不胜感激。
你好[Bobby tables](http://xkcd.com/327/)。你的代码不安全!你的应用程序很容易进行SQL注入。用'mysql_real_escape_string()'退出SQL查询中使用的所有参数,就像你在某些地方做的一样。不要让这个'$ m =“和方法= {$ _GET ['m']}”;'滑过。 – Shef
首先,请添加表('log','item_definition',...)定义:字段,类型,约束,(主键,外键),索引,引擎。 –