0

私はこのようなSQLクエリを持っています。私のphpファイルを介してiamを実行すると、タイムアウトエラーが発生します。しかし、同じクエリを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秒以上費やしたくありません。

4

2 に答える 2

1

問題は、2 つのテーブル間の関係を特定していないことです。phpmyadmin は LIMIT 句を追加して、mysql サーバーが行の送信をすばやく停止し、タイムアウトに近づくことがないようにするため、phpmyadmin にすばやく戻ります。

クエリはアパートが賃貸されておらず、アクティブな行を取得しているだけだと思いますが、実際に得られるのは、行数 * データベース内の近隣の数です。

クエリを次のように書き換えます。

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句で2つのテーブルがどのように関連しているかを推測しただけなので、間違っている場合は調整する必要があることに注意してください。

于 2009-10-01T13:21:00.097 に答える