Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Doppelte Tabelle in GROUP BY

  Alt 4. Jul 2012, 09:34
Ich sehe hier keine gleichen Tabellen. Gäbe es welche, würde man sie in der From Clause eintragen und unterschiedliche Aliase vergeben.
Verschieden sind tatsächlich die verwendeten Namen der Tabelle(n) artikel_kategorie[n]. Vielleicht ein Copy / Paste Fehler , vielleicht aber auch original Abfragetext, dann würde es tatsächlich 2 fast glelichnamige Tabellen geben?!

Die verschiedenen Counts in einer Menge würde ich mal vergessen.

Ein Group By sollte auch und gerade bei MySQL(vermute ich, da es so in anderen Systemen gar nicht laufen würde) immer alle nicht aggregierten Felder einschließen, sonst kannst Du die Ergebnisse auch gleich auf der Kirmes bei der Wahrsagerin abholen.

Lieber so:
Code:
SELECT a.id AS A_ARTIKELID,
       a.name AS A_ARTIKELNAME,
       ak.name AS ak_kategorien_name,
       ab.artikel_id AS ab_artikel_id,
       ab.BENUTZERCOUNT,
       abw.artikel_id AS abw_artikel_id,
       abw.product_id AS abw_product_id,
       abw.AVGVOTE,
       abw.VOTECOUNT
  FROM artikel a, artikel_kategorien ak,
     ( select artikel_id, COUNT(ab.benutzer_id) AS BENUTZERCOUNT
         from artikel_benutzer
        group by artikel_id ) ab,
     ( select artikel_id, product_id,
                AVG(abw.vote) AS AVGVOTE, COUNT(abw.vote) AS VOTECOUNT
           from artikel_benutzer_wertung
          group by artikel_id, product_id ) abw
 WHERE ab.type != 0
   AND a.artikel_kategorie_id = 15
   AND a.artikel_kategorie_id = ak.id
   AND a.id = ab.artikel_id
   AND a.id = abw.artikel_id
Das könnte so funktionieren, wenn die Artikel eindeutig sind. Bei den Produkt_ID kann ich schwer voraussagen, wie die das Ergebnis beeinflussen.

Ansonsten muss alles noch mal gruppiert und die Aggregat Felder aus den Unterabfragen summiert werden.
Gruß, Jo
  Mit Zitat antworten Zitat