Sven: JOIN-Query sehr langsam

Beitrag lesen

Hi Vinzenz, danke für die ausführliche Antwort!

Gibt es Berater, denen keine Städte zugeordnet sind?

Keinem Berater sind Städte zugeordnet :)
Ich habe ein paar Berater, bei denen eine PLZ hinterlegt ist und anhand der PLZ schaue ich nach den zugehörigen Längen-und-Breiten-Koordinaten (diese stehen in der Tabelle "staedte").

Das ist völlig logisch und normal. Du hast keine Join-Bedingung auf Gleichheit, die schnell Ergebnisse bringt, Du hast zwei Ungleichheitsbedingungen.

Ah, dann sollte ich vielleicht hier eine JOIN-Anweisung verwenden :)

Das gleiche wie vorher? Das gewünschte? Das bezweifle ich. Ich stelle mir vor, da gibt es eine Stadt, für die Berater von 60311 (Frankfurt) bis 66663 (Merzig) zuständig sind. Deine Vorgehensweise wird als einziges Resultat Berater aus 60311 Frankfurt liefern, nicht jedoch solche aus Merzig ...

Berater sind nicht für bestimmte Städte zuständig, dies ist eine Umkreissuche :) Das bedeutet, wenn du in München wohnst und es gibt einen Berater in Frankfurt und einen in Berlin wird dir der Berater in Frankfurt ausgespuckt :)

SELECT

<sonstige spalten>,
    b1.id as id,         -- Gib mir alle Berater, die für
    s.id as stadt_id     -- eine bestimmte Stadt zuständig sind, weil
staedte s
INNER JOIN berater b1 ON s.plz_von <= b1.plz -- die PLZ ihres Ortes größer ist
                                             -- als die Mindest-PLZ und
INNER JOIN berater b2 ON s.plz_bis >= b2.plz -- kleiner als die Maximal-PLZ
                                             -- dieser Stadt

  
Danke für den Code, werde ihn gleich mal ausprobieren.  
  

> Weitere Idee:  
> Deine PHP-Schleife könntest Du (MySQL 5.x.y) in eine Stored Procedure in die DB verlagern ...  
  
Leider nur MySQL - 4.0.21-standard  
  
Viele Grüße,  
Sven