2009-10-01 50 views
0

我有这样的SQL查询。当我通过php文件执行它时,它会给出超时错误。但是,当运行相同的查询thoruhg PHP myadmin它会在几秒钟内给出结果。PHP MYSQL超时问题

SELECT 
    cake_apartments.id, 
    cake_apartments.Headline, 
    cake_apartments.Description, 
    cake_apartments.photoset_id, 
    cake_apartments.Rental_Price, 
    cake_apartments.Bedrooms, 
    cake_apartments.Bathrooms 
FROM 
    cake_apartments,cake_neighborhoods 
WHERE 
    (cake_apartments.Rented = 0) 
    AND 
    (cake_apartments.status = 'Active') 
ORDER BY 
    cake_neighborhoods.Name DESC 

我知道增加超时可能会解决问题。但我不想花费超过30秒的查询。

+0

东西可能是错在某些循环。 – 2009-10-01 09:03:55

+0

我同意亚历克,如果查询结果在几秒钟内在PHPMyAdmin中,那么你的脚本还有其他错误。 – Bobby 2009-10-01 09:05:14

+0

您的查询接缝确定。我想说的主要问题是连接到数据库。你能在这里发表这个剧本吗? phpMyAdmin可能以不同的方式连接到你的MySQL数据库。 – Frankie 2009-10-01 09:06:17

回答

1

问题是你没有具体说明你的两张表之间的关系。它会在phpmyadmin中快速返回,因为phpmyadmin添加了一个LIMIT子句,允许mysql服务器快速停止发送行,永远不会超时。

您认为查询只是检索哪些公寓没有租用并且处于活动状态的行,但是您真正获得的是行数*您数据库中的邻居数量。

重写查询是这样的:

SELECT 
    cake_apartments.id, 
    cake_apartments.Headline, 
    cake_apartments.Description, 
    cake_apartments.photoset_id, 
    cake_apartments.Rental_Price, 
    cake_apartments.Bedrooms, 
    cake_apartments.Bathrooms 
FROM 
    cake_apartments 
JOIN 
    cake_neighborhoods 
    ON 
    cake_neighborhoods.id = cake_apartments.neighborhood_id 
WHERE 
    (cake_apartments.Rented = 0) 
    AND 
    (cake_apartments.status = 'Active') 
ORDER BY 
    cake_neighborhoods.Name DESC 

注意,我只猜到了这两个表是如何在ON子句中相关的,所以如果我理解错了,你就必须进行调整。

1

如果您只想要存在匹配的行,那么您的SQL需要包含一个INNER JOIN。如果cake_neighborhoods.cake_apartments_id是在cake_neighborhoods表的外键的名字,我建议重写查询,如下:

SELECT 
    cake_apartments.id, 
    cake_apartments.Headline, 
    cake_apartments.Description, 
    cake_apartments.photoset_id, 
    cake_apartments.Rental_Price, 
    cake_apartments.Bedrooms, 
    cake_apartments.Bathrooms, 
    cake_neighborhoods.Name 
FROM 
    cake_apartments,cake_neighborhoods 
WHERE 
    (cake_apartments.Rented = 0) 
    AND 
    (cake_apartments.status = 'Active') 
    AND 
    cake_neighborhoods.cake_apartments_id = cake_apartments.id 
ORDER BY 
    cake_neighborhoods.Name DESC