Vinzenz Mai: Abfrage

Beitrag lesen

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