2009-10-01 5 views
0

이런 SQL 쿼리가 있습니다. iam이 php 파일을 실행하면 시간 초과 오류가 발생합니다. 그러나 동일한 쿼리를 실행할 때 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

무언가가 일부 루프에서 잘못 될 수 있습니다. –

+0

알렉 (Alec)에 동의합니다. 쿼리가 PHPMyAdmin에서 몇 초 내에 결과를 제공한다면 스크립트에 다른 문제가 있습니다. – Bobby

+0

귀하의 검색어 seams ok. 주요 문제는 데이터베이스에 연결되어 있다고 말할 수 있습니다. 그 스크립트를 여기 게시 할 수 있습니까? phpMyAdmin이 아마도 MySQL 데이터베이스에 다른 방식으로 연결하고있을 것입니다. – Frankie

답변

1

문제는 두 테이블 간의 관계가 명확하지 않다는 것입니다. phpmyadmin은 LIMIT 절을 추가하기 때문에 phpmyadmin에서 신속하게 반환됩니다.이 절을 사용하면 mysql 서버는 절대로 시간 초과에 가까이 가지 않고 행을 빠르게 보낼 수 있습니다.

당신은 아파트가 대여되지 않고 활성화되어있는 행을 검색하고 있지만 실제로 얻는 것은 행 번호 * 데이터베이스에있는 이웃 수입니다.

은 다음과 같이 쿼리를 다시 작성

: 내가 잘못 그것을 가지고 있다면 당신이 그것을 조정해야 할 것이다, 그래서 난 단지, 두 개의 테이블이 ON 절에 어떻게 관련되는지를 짐작

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 

메모를.

1

일치하는 부분이있는 행만 원할 경우 SQL에 INNER JOIN이 포함되어야합니다. cake_neighborhoods.cake_apartments_idcake_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