AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Doppelte Tabelle in GROUP BY
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Tabelle in GROUP BY

Ein Thema von ChEeTaH · begonnen am 3. Jul 2012 · letzter Beitrag vom 4. Jul 2012
Antwort Antwort
jobo

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

AW: Doppelte Tabelle in GROUP BY

  Alt 4. Jul 2012, 08: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
tgvoelker

Registriert seit: 9. Sep 2002
Ort: Oelsnitz, Vogtland
44 Beiträge
 
Delphi 12 Athens
 
#2

AW: Doppelte Tabelle in GROUP BY

  Alt 4. Jul 2012, 21:58
Ich nehme an, daß Du folgendes tun willst: Je Artikel ausgeben, wieviele Bewertungen abgegeben wurden, wie die durchschnittliche Bewertung ist und wievielen Benutzern der zugewiesen ist.

Zum Verständnis folgendes: in Deiner From-Klausel
Code:
FROM
    artikel,
    artikel_kategorien,
    artikel_benutzer,
    artikel_benutzer_wertung
bildest Du das Kreuzprodukt aller Datenmengen, aus dem Du dann mit Deiner Where-Klausel die Tupelkombinationen rausfischst, die den angegebenen Kriterien entsprechen.

Verwendest Du Joins, dann baut die Engine entsprechend der Bildungsvorschrift Kombinationen der Tupel.

Das Problem dabei ist nun, daß im Kreuzprodukt nicht-zuordbare Tupel garnicht ausgegeben werden, heißt, wenn ein Datensatz [artikel] existiert, für den kein Datensatz [artikel_benutzer_wertung] existiert, aber ein Datensatz [artikel_benutzer], dann siehst Du den NICHT in Deinem Ergebnis. Das ist bei dem Inner Join übrigens genauso.

Damit Du alle Artikel bekommst, mußt Du Outer Joins verwenden, die geben zusätzlich zu den gemäß Bildungsvorschrift gebildeten Tupelkombinationen auch die Nicht zuordenbaren aus: LEFT JOIN die nicht zuordenbaren, die links vom Operator stehen, RIGHT JOIN die rechts und FULL OUTER JOIN sowohl die rechts , als auch die links.

Zurück zu Deinem Beispiel: die Syntax ist abhängig davon, wie die Tabellen aufgebaut sind:
  1. Ist product_id eindeutig je Artikel?
  2. wird in artikel_benutzer_wertung benutzerspezifisch die Artikelbewertung erfaßt, d.h. ist dadrin eine Referenz auf den Benutzer enthalten?
  3. in diesem Kontext: sind die Bewertungen symmetrisch, d.h. jede Einzelbewertung hat die gleiche Wichtung? (Hintergrund: wenn ein Benutzer 2 mal bewertet, ein anderer nur einmal, dann beeinflußt die Doppelbewertung des einen Benutzers das ergebnis mehr, als die Einfachbewertung des anderen)
Thomas Völker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz