Вопрос

У меня есть такой 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top