Frag einfach die Eigenschaften ab mit Left Join auf das Auto - oder eben Right Join, wie ich bereits geschrieben habe.
Autos mit Eigenschaften
Collapse
X
-
-
Ich kann leider die Struktur der Datenbank nicht verändert, deswegen hab ich es jetzt erstmal so gemacht:
Dadurch werden zwar zunächst alle abgefragt die eine der Eigenschaft haben, aber wird dann die den Mutterselect aussortiert. Bei 730.000 Datensätzen find ich es mit 1.0 Sekunden noch recht schnellPHP Code:SELECT autoname FROM autotabelle
WHERE (SELECT count(eigenschafttabelle.auto_id) FROM eigenschafttabelle
WHERE autotabelle.auto_id = eigenschafttabelle.auto_id
AND (eigenschaft = 3 OR eigenschaft = 4) GROUP BY auto_id) = 2
Ich werd dann mal optimieren....
nein?
Comment
-
Ich hab auch nicht behauptet, dass du was umändern sollst...
Edit: Sorry, dein Problem lag beim AND, glaube ich, oder? Mh, ich würde dann die Tabelle tatsächlich zweimal joinen.PHP Code:SELECT autoname
FROM eigenschaftstabelle
LEFT JOIN autotabelle
USING ( auto_id )
WHERE eigenschaft = 3
OR eigenschaft = 4
GROUP BY auto_id
Comment
-
Ich müsste ja für jede Eigenschaft eine Tabelle mit 730.000 Einträgen joinen...Original geschrieben von ministry
Edit: Sorry, dein Problem lag beim AND, glaube ich, oder? Mh, ich würde dann die Tabelle tatsächlich zweimal joinen. [/B]nein?
Comment
-
Ja, du hast Recht - ich hab das Problem zu spät kapiert. Sorry für den Unsinn. Dann scheint deine Lösung doch recht passabel zu sein.
Comment
-

dependend subqueries sind für gewöhnlich der Tod für jeden DB-Server (zumindest in mysql)
probier mal sowas
SELECT autoname, COUNT(b.auto_id) anz FROM autotabelle a LEFT JOIN eigenschafttabelle b ON a.auto_id = b.auto_id AND b.eigenschaft IN (3, 4) WHERE anz = 2 GROUP BY a.auto_id
Wenn das nicht geht
SELECT autoname, COUNT(b.auto_id) anz FROM autotabelle a LEFT JOIN eigenschafttabelle b ON a.auto_id = b.auto_id AND b.eigenschaft IN (3, 4) GROUP BY a.auto_id HAVING anz = 2
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Comment
-
Ich habs jetzt mit Join versucht, allerdings scheint es durch die größere der Eigenschafttabelle ca. 4 mal langsamer als Subquery.Original geschrieben von ghostgambler
dependend subqueries sind für gewöhnlich der Tod für jeden DB-Server (zumindest in mysql)
Das hab ich jetzt übernommen und konnte damit auf die Hälfte der Zeit kommen. Zusätzlich hab ich die Abfrage der Zahl mit in den Subquery genommen und außen nur mit IS NOT NULL gegen getestet. Die Performance ist jetzt noch recht überzeugend, mal gucken wie es bei noch mehr Benutzern aussieht.b.eigenschaft IN (3, 4)
Vielen Dank für eure Hilfe.nein?
Comment
Comment