mysql gruppierte Abfrage optimieren

Spelmann

Erfahrenes Mitglied
Ich hab mir einige Einträge zum Thema MYSQL und GROUP durchgelesen aber nicht erkennen können wie ich das für mich umsetzen kann.

Wenn ich eine Abfrage schreibe
Code:
SELECT kategorie,artikel FROM ek_artikel GROUP BY kategorie
wird mir im nachfolgenden Listing
Code:
while($zeileKategorie=$ergebnis1->fetch_object()){echo $zeileKategorie->Artikel...}
immer nur ein Ergebnis ausgegeben.

Also verschachtel ich zwei Abfragen in dieser Weise:
Code:
if($ergebnis1 = $db->query('SELECT kategorie,artikel FROM ek_artikel GROUP BY kategorie')){
                    while($zeileKategorie=$ergebnis1->fetch_object()){
                        echo "<img src='grafik/".$zeileKategorie->kategorie.".jpg' /><br />";
						if($ergebnis2 = $db->query('SELECT * FROM ek_artikel WHERE kategorie="'.$zeileKategorie->kategorie.'"')){
							while($zeile=$ergebnis2->fetch_object()){
								echo $zeile->artikel;
								}
							
							}
                        }
                }
Das funktioniert zwar, entbehrt nun aber jedlicher Eleganz.
Kann man das kompakter machen?
 
item: Es ist unschön Felde auszugeben die nicht im GROUP BY definiert sind und auf die keine GroupBy-Function (SUM, MAX etc) ausgeführt wird. Denn du hast nicht definiert was beim Gruppieren mit der Spalte artikel gemacht werden soll.

item: Wenn du einfach eindeutige Zeilen haben willst, dann erreichst du das auch mittels DISTINCT
SQL:
SELECT DISTINCT kategorie,artikel FROM ek_artikel
 
Zuletzt bearbeitet von einem Moderator:
Hallo yaslaw,

es handelt sich hier schlicht um eine Einkaufsliste zu Übungszwecken.
Alle Produkte stehen lang hin und durcheinander in einer Tabelle.
Jedem Produkt ist ist in der Spalte kategorie ein Wert zugeordnet.
Backwaren, Milchprodukte, Fleischtheke

Ich möchte nun, dass alle Produkte in Kategorien zusammengefasst aufgelistet werden.
Also erst alle Artikel aus Backwaren, dann aus Milchprodukte, dann Fleischtheke usw.

Ich denke mir, dass das doch recht einfach zu lösen sein muss.
o.g. Beispiel von Dir wiederholt allerdings jede Kategorie, jenachdem wieviele Produkte ihr zugeordnet sind.

Ich habs nun mal so versucht, gejt aber auch nicht:
Code:
if($ergebnis = $db->query('SELECT kategorie, artikel, COUNT(*) AS zahl FROM ek_artikel GROUP BY kategorie')){
                    while($zeile=$ergebnis->fetch_object()){
                        echo "<img src='grafik/".$zeile->kategorie.".jpg' /><br />";
						
						for($count = 1; $count < $zahl; $count++)
							{
							  echo $zeile->artikel;
							  echo $count;
							}
                        }
                }
 
Zuletzt bearbeitet:
Zurück