Проблема тайм-аута PHP MYSQL
-
19-09-2019 - |
Вопрос
У меня есть такой SQL-запрос.Когда я выполняю его через мой php-файл, выдается ошибка тайм-аута.Но при выполнении того же запроса через 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 секунд.
Решение
проблема в том, что вы не указали связь между двумя таблицами.он быстро возвращается в 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, поэтому, если я ошибся, вам придется это исправить.
Другие советы
Если вам нужны ТОЛЬКО строки, в которых существует совпадение, ваш SQL должен включать INNER JOIN.Если cake_neighborhoods.cake_apartments_id это имя вашего внешнего ключа в cake_neighborhoods table, я предлагаю переписать запрос следующим образом:
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