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.