Hallo Marcus,
Du hattest recht. Es ist halb so wild
leider wird Dein Statement maximal von MySQL akzeptiert.
> SELECT * , COUNT( * ) -- SELECT * ist böse
> FROM `filmtag`
> WHERE film
> IN (
> SELECT film
> FROM filmtag
> WHERE tag =179777
> )
> GROUP BY tag -- und in Verbindung mit GROUP BY falsch
> ORDER BY `COUNT( * )` DESC
Wenn Du GROUP BY verwendest, musst Du nach _allen_ Spalten, die Du auswählst, gruppieren, sofern keine Aggregatsfunktion verwendet wird.
Besser:
SELECT --
tag, -- wähle nur die Spalte aus, die Du benötigst
COUNT(tag) AS anzahl -- gebe der Spalte einen netten Aliasnamen, macht
-- sich auch in PHP besser
FROM
filmtag
WHERE
film
IN (
SELECT
film
FROM
filmtag
WHERE
tag = 179777
)
GROUP BY
tag
ORDER BY
COUNT(tag) DESC -- in MySQL könntest Du auch den Aliasnamen nehmen
Klingt unglaublich kompliziert (und ist es ja auch) und ich habe mir von einer SQL Lösung eine deutlich bessere Performance erwartet. Dazu muss gesagt werden, dass die Zuordnung derzeit ca 200.000 Einträge hat. Lustig an der Sache ist, dass die PHP Lösung ca 1 Sekunde braucht, die Verschachtelte SQL Abfrage aber 25 Sekunden .......
Hab ich einen Performancefehler in meiner Abfrage oder ist da einfach die händische Lösung besser. Schon erstaunlich. Macht nicht SQL intern genau das, was ich in PHP mache ????
Befrage MySL dazu, MySQL erklärt Dir gerne, was es solange macht - und es gibt auch ein Kapitel, das sich damit beschäftigt, wie Du Abfragen optimierst.
Eine Frage vornweg: Welche Indexe sind in Deiner Tabelle vorhanden?
Freundliche Grüße
Vinzenz