在当前时间之前查询和返回时间较慢

时间:2013-01-30 15:27:35

标签: php mysql

我的网站加载速度非常慢,只有一个页面加载缓慢,我怀疑这是因为MySQL查询被发送到数据库。我怎样才能加快速度?

$depquery = "SELECT * FROM phpvms_schedules 
WHERE code = 'FE'
AND locate(dayofweek(convert_tz(now(),'+1:00','+0:00'))-1,".TABLE_PREFIX."schedules.daysofweek)>0
AND phpvms_schedules.enabled = '1'
ORDER BY deptime ASC";

该查询基本上是将信息提取到“离境委员会”表中。该表按deptime排序,并显示当前时间的结果。但是,我还希望它能够在当前时间之前至少返回4条记录到4个航班。

为了澄清,让我举个例子:

现在是15:25。由于if(($flight->deptime) >= $time)if($count < 15)以及foreach内部,它将在该时间之后显示15条记录。但是,我还希望返回4条记录,因此它会在15:25之前找到最后4条记录。这可能吗?

基本上,我想在当前时间内上下搜索。

1 个答案:

答案 0 :(得分:2)

你想要一个UNION,比如:

SELECT * phpvms_schedules 
WHERE code = 'FE' 
AND locate(dayofweek(convert_tz(now(),'+1:00','+0:00'))-1,
     ".TABLE_PREFIX."schedules.daysofweek)>0
AND phpvms_schedules.enabled = '1'
ORDER BY deptime ASC
LIMIT 15
UNION ALL
SELECT * phpvms_schedules 
WHERE code = 'FE' 
AND locate(dayofweek(convert_tz(now(),'+1:00','+0:00'))-1,
     ".TABLE_PREFIX."schedules.daysofweek)<0
AND phpvms_schedules.enabled = '1'
ORDER BY deptime DESC
LIMIT 4

注意我没想到你的约会功能,因为我不知道它在做什么。我刚改变了&gt;到&lt;以及对DESC的deptime的排序。 (其中一个&lt;&gt;可能还需要= =现在不要错过出发?)

使用LIMIT将在数据库中进行过滤,而不是在您听起来像这样的代码中进行过滤。这将减少在代码中处理此信息的开销,并且应该使其更快。我还要在DB中对这些结果的UNION进行排序,并避免在代码中进行。

修改

完全清楚这应该处理DB中的排序:

SELECT tbl* FROM (
SELECT * phpvms_schedules 
WHERE code = 'FE' 
AND locate(dayofweek(convert_tz(now(),'+1:00','+0:00'))-1,
     ".TABLE_PREFIX."schedules.daysofweek)>0
AND phpvms_schedules.enabled = '1'
ORDER BY deptime ASC
LIMIT 15
UNION ALL
SELECT * phpvms_schedules 
WHERE code = 'FE' 
AND locate(dayofweek(convert_tz(now(),'+1:00','+0:00'))-1,
     ".TABLE_PREFIX."schedules.daysofweek)<0
AND phpvms_schedules.enabled = '1'
ORDER BY deptime DESC
LIMIT 4
) as tbl ORDER BY tbl.deptime ASC