Thomas Poenicke: & (MySQL) Komplizierter Query

Beitrag lesen

Hallo Ludwig!

Hab ich jetzt ein Brett vorm Kopp?

1. Wo ist Dein JOIN?
2. Wieso legst Du Bedingungen auf Tabellen, die nicht mit im SELECT-Statement drin sind?

SELECT DISTINCT ausschreibung.ausschreibungsid FROM ausschreibung,berufsgruppezw,spezialbereichzw,regionzw,artzw WHERE ausschreibung.ausart = 'gesuch' AND berufsgruppezw.berufsgruppeid = '11' OR berufsgruppezw.berufsgruppeid = '12'

<Schlamassel>
AND spezialbereichzw.spezialbereichid = '16' OR spezialbereichzw.spezialbereichid = '5' AND regionzw.regionid = '11' OR regionzw.regionid = '6' AND artzw.artid = '6' OR artzw.artid = '7';
</Schlamassel>

Durch den Join über 5 Tabellen ist das ganze aber so dermassen langsam das so ein query direkt an den mysql client abgegeben ca. 5 minuten braucht, gibt es da auch einen anderen weg?

Eben nicht! Deine Ergebnisse der Query duerften recht seltsam sein. IMHO muesste die Query etwa so aussehen:

<schnipp>
SELECT DISTINCT ausschreibung.ausschreibungsid
FROM (((artzw INNER JOIN ausschreibung ON artzw.artid = ausschreibung.ausschreibungsid) INNER JOIN berufsgruppezw ON ausschreibung.ausschreibungsid = berufsgruppezw.berufsgruppeid) INNER JOIN regionzw ON berufsgruppezw.berufsgruppeid = regionzw.regionid) INNER JOIN spezialbereichzw ON regionzw.regionid = spezialbereichzw.spezialbereichid
WHERE (((ausschreibung.ausart)='gesuch') AND ((berufsgruppezw.berufsgruppeid)=11) AND ((regionzw.regionid)=11) AND ((spezialbereichzw.spezialbereichid)=16) AND ((artzw.artid)=6)) OR (((berufsgruppezw.berufsgruppeid)=12) AND ((regionzw.regionid)=6) AND ((spezialbereichzw.spezialbereichid)=5) AND ((artzw.artid)=7));
</schnapp>

Zur Erklaerung:

Ich habe hier die Tabellen jeweils ueber die id verknuepft (was eigentlich bloedsinn ist, das jeweils die Verknuepfungs-ID sein muss, aber aus Zeitmangel halt). Die JOIN-Anweisungen sind hier INNER JOIN, muessen aber LEFT JOIN sein, wenn in der linken Tabelle mehr datensaetze ausgewaehlt werden, wie in der rechten bzw. RIGHT JOIN, wenn andersrum. Es ist halt nur auf die Schnelle zusammengebastelt.

Kleiner Tipp: Wenn Du ein Datenbankprogramm hast (z.B. Access), bastel Dir die DB einfach nach und ertselle die Querys WYSIWYG.

Hoffe, Du kommst damit zurecht (ganz schoen leidiges Thema, meine laengste Abfrage hab ich per VBA erstellt, ein UNION aus mehreren Tabellen mit mehreren JOINS, etwa 1000 Zeichen lang)

Gruß
Thomas