Venuesテーブルに会場のリストがあり、Locationsテーブルに市/州のリストがあります。会場は私の組織に固有の市外局番(SOYID)と関連しています。 SOYIDは地理的エリアで構成されています。Locationsテーブルの各行にはCity、State、および対応するSOYIDがあります。 Venuesの行の一部にはSOYIDがあり、それ以外の行にはSOYIDがありません。そうでない人のためには、私は都市と州のためのSOYIDを見つける必要があります。私は特定のSOYIDの中でその会場を選択したいだけです。小さなMySQL結合クエリの最適化
このクエリは機能しますが、読み込むには数秒かかります。私は質問を正しく書いているとは思わない。現在、Venuesには約140行、Locationsには40,000があります。
$sql = "SELECT DISTINCT a.VenueID, a.Name, a.PhotoID, a.City, a.StateAbbr
FROM Venues AS a LEFT JOIN Locations AS c ON a.City = c.city
WHERE a.SOYID = '" . mysql_real_escape_string($SOYID) . "'
OR ((c.city = a.City) AND (c.state = a.StateAbbr) AND (c.SOYID = '" . mysql_real_escape_string($SOYID) . "'))
ORDER BY a.Name ASC";
:コメントに基づいて、このバージョンは、あなたが
DISTINCT
要件を削除するには許可する必要がありますが今、彼はできない?あるいは、 'DISTINCT'の代わりに' GROUP BY a.VenuID'を使用してください。 –@ypercube:はい、おそらく 'DISTINCT 'を落とすのは安全だと思います。 –
私は別名をドロップすると、私はまだ繰り返し行を取得するので、私はまだ別名を保持する必要があります。ありがとう! –