2009-10-01 41 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