Проблема тайм-аута PHP MYSQL - PullRequest
0 голосов
/ 01 октября 2009

У меня есть такой запрос SQL. Когда я выполняю его через мой php-файл, он выдает ошибку тайм-аута. Но при выполнении того же запроса thorhhg php myadmin он дает результаты в течение нескольких секунд.

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 секунд на этот запрос.

Ответы [ 2 ]

1 голос
/ 01 октября 2009

Если вы хотите ТОЛЬКО строки, в которых есть совпадение, ваш 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
1 голос
/ 01 октября 2009

проблема в том, что у вас нет конкретной связи между вашими двумя таблицами. он быстро возвращается в 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, поэтому, если я ошибся, вам придется настроить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...