Php 如何优化这些查询?
我知道有两个领域是流程妓女,但我不知道如何改善它们 这里显示了两个有问题的地方 以及相应的查询 区域1Php 如何优化这些查询?,php,mysql,query-optimization,Php,Mysql,Query Optimization,我知道有两个领域是流程妓女,但我不知道如何改善它们 这里显示了两个有问题的地方 以及相应的查询 区域1 $nresult = mysql_query("SELECT time FROM log ORDER BY time LIMIT 1") or die(mysql_error); $nr = mysql_fetch_assoc($nresult); $
$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>";
$nresult=mysql\u查询(“选择时间
从日志
按时间订购
限制1”)或模具(mysql_错误);
$nr=mysql\u fetch\u assoc($nresult);
$aresult=mysql\u查询(“选择*
从日志)或死亡(mysql_错误);
$an=mysql\u num\u行($aresult);
$aresult=mysql\u查询(“选择平均值(玩家))
从日志)或死亡(mysql_错误);
$ap=mysql\u fetch\u assoc($aresult);
$average=round($an/((time()-$nr['time'])/60/60),2);
echo“{$an}项自”。日期(“F j,Y”,$nr[‘时间’])。“在”。日期(“g:IA,$nr[‘时间’])。“
”$一般。“每小时收到的项目(“.round($average/$ap['AVG(players)”),2)。”/player/hour)。
显示每页{$\u会话['limit']}个项目。
”;
区域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 />";
if(!empty($_GET['s'])和&!empty($_GET['t'])和&!empty($_GET['m'])和&!empty($_GET['q'])){
如果($_GET['m']!='all'){
$m=“AND method={$\u GET['m']}”;
}
否则{
$m='';
}
如果($_GET['q']!='all'){
$q=“AND quality_id={$\u GET['q']}”;
}
否则{
$q='';
}
如果($_GET['s']=''){
$s='1=1';
}
否则{
$s=“{$\u GET['t']}类似“%”。mysql\u real\u escape\u字符串($\u GET['s'])。“%”;
}
$num\u result=mysql\u查询(“选择*
从日志
左联接项定义
on log.item=item\u definition.item\u definition\u desc
左连接法
on log.method=method.method\u id
左连接项
在item\u definition.item\u definition\u id=item.item\u id上
左加入服务器
在log.server=server.ip上
左连接质量
在log.quality=quality.quality\u id上
其中{$s}
{$m}
{$q}”)
或者死(mysql_error());
}
否则{
$num\u result=mysql\u查询(“选择*
从日志)或死亡(mysql_error());
}
$total=mysql\u num\u行($num\u result);
“回声”$全部的“结果
”;
现场页面在这里
正如您所看到的,它需要很长时间才能加载
欢迎提供任何提示。我没有看到任何限制/偏移命令。。如果你在商店里使用分页功能,这可能会给你带来提升。
或者您也可以尝试将其缓存到某个位置(如果搜索筛选器没有更改)我看不到任何限制/偏移命令。。如果你在商店里使用分页功能,这可能会给你带来提升。
或者您也可以尝试将其缓存到某个位置(如果搜索筛选器没有更改)将第二个查询替换为日志中的
选择计数(*),因为您正在获取行计数并忽略行数据。将第二个查询替换为日志中的选择计数(*),因为您正在获取行计数并忽略行数据。您好。你的代码不安全!您的应用程序易于SQL注入。使用mysql\u real\u Escape\u string()
转义SQL查询中使用的所有参数,就像在某些地方所做的那样。不要让这个$m=“AND method={$\u GET['m']}”代码>跳过。首先,请添加表“(log
,item\u definition
,…)定义:字段、类型、约束、(主键、外键)、索引、引擎。您好。你的代码不安全!您的应用程序易于SQL注入。使用mysql\u real\u Escape\u string()
转义SQL查询中使用的所有参数,就像在某些地方所做的那样。不要让这个$m=“AND method={$\u GET['m']}”代码>跳过。首先,请添加表(log
,item\u definition
,…)定义:字段、类型、约束、(主键、外键)、索引、引擎。但是,如果我限制表中的所有行,如何计算它们?您可以执行一个只计算元素的单独查询。如果它不必返回大量数据,速度会快得多。@duedl0r:您已经使用“SELECT*FROM log”
查询进行了计数,不是吗?但是如果我限制了表中的所有行,如何计算它们呢?您可以执行只计算元素的独立查询。如果它不必返回大量数据,速度会快得多。@duedl0r:您已经用从日志中选择*查询了,是吗?