Anfängerfrage zu Select Statement
Hans
- datenbank
Hallo,
habe mal eine ganz blöde Frage:
Habe eine Tabelle in der ich z.B. 150 Datensätze in Deutsch, 200 Datensätze in Englisch, 25 Datensätze in Französisch usw. habe.
Tabelle ist so aufgebaut: ID, Sprache, Feld1, Feld2, Feld3 etc.
Nun möchte ich eine Ausgabe kreieren die ungefähr so aussehen soll:
Deutsch (150)
Englisch (200)
Französisch (25)
etc.
Wie muß ich das Select-Statement schreiben:
select count(ID) as anzahl from Tabelle GROUP BY Sprache ORDER BY Sprache (aber hier zählt er mir doch alle Einträge, oder?)
oder
select distinct(Sprache) from Tabelle ORDER BY Sprache (nur wie bekomme ich dann die Anzahl der Einträge?)
Oder wie sollte das aussehen?
Danke für eure Hilfe,
Hans
Hallo,
teil deine Auf´gaben doch ein.
Du schreibst in deinen Quellcode
Deutsch
Englisch
Französisch
Und via SQL holst du dir
SELECT count(id) from tabelle WHERE Sprache = "deutsch"
SELECT count(id) from tabelle WHERE Sprache = "englisch"
SELECT count(id) from tabelle WHERE Sprache = "französisch"
Hallo,
teil deine Auf´gaben doch ein.
Du schreibst in deinen Quellcode
Deutsch
Englisch
FranzösischUnd via SQL holst du dir
SELECT count(id) from tabelle WHERE Sprache = "deutsch"
SELECT count(id) from tabelle WHERE Sprache = "englisch"
SELECT count(id) from tabelle WHERE Sprache = "französisch"
Im Prinzip eine gute Idee, aber dann muß ich ja jedesmal wenn eine weitere Sprache hinzukommt den Quellcode erweitern und eine neues Selectstatement schreiben. Das will ich natürlich vermeiden.
Grüße,
Hans
SELECT count(id) from tabelle WHERE Sprache = "deutsch"
SELECT count(id) from tabelle WHERE Sprache = "englisch"
SELECT count(id) from tabelle WHERE Sprache = "französisch"
HI!
Du kannst die einzelnen "Sprachbezogenen" abfragen auch mit einem Union verbinden und diese in ein Subquery packen. Also ungefähr so.
Select count(*) from
(
SELECT count(id) as deutsch, 0 as englisch, 0 as franzosen from tabelle WHERE Sprache = "deutsch"
union
SELECT count(id) as englisch, 0 as deutsch, 0 as franzosen from tabelle WHERE Sprache = "englisch"
union
SELECT count(id) as franzosen, 0 as englisch, 0 as deutsch) from tabelle WHERE Sprache = "französisch"
)
...So oder so ähnlich je nach dem welches DBMS du verwendest...
MFG
Peter
Select count(*) from
(
SELECT count(id) as deutsch, 0 as englisch, 0 as franzosen from tabelle WHERE Sprache = "deutsch"
union
SELECT count(id) as englisch, 0 as deutsch, 0 as franzosen from tabelle WHERE Sprache = "englisch"
union
SELECT count(id) as franzosen, 0 as englisch, 0 as deutsch) from tabelle WHERE Sprache = "französisch"
)...So oder so ähnlich je nach dem welches DBMS du verwendest...
MFG
Peter
Hallo Peter,
auch Dir danke, aber das Problem bleibt das gleiche. Ich kann vorher nicht festlegen nach welchen Sprachen gesucht wird. Momentan sind es nur die drei aber vielleicht kommt morgen ein Datensatz in Italienisch und Übermorgen in Japanisch dazu. Also müßte das Select Statement so geschrieben sein, daß automatisch alle eingetragenen Sprachen entsprechend berücksichtig werden.
Grüße,
Hans
Hallo Hans,
versuche mal deine beiden Ansätze zu kombinieren
select Sprache,count(*) ... group by Sprache.
Gruß Mia
Hallo Hans,
versuche mal deine beiden Ansätze zu kombinieren
select Sprache,count(*) ... group by Sprache.Gruß Mia
Hallo Mia,
danke für den Tip.
Muß ich da nicht select distinct schreiben? Genügt das Group By wenn ich die Ausgabe in einer while Schleife machen will?
Grüße,
Hans
Hallo Hans,
Muß ich da nicht select distinct schreiben? Genügt das Group By wenn ich die Ausgabe in einer while Schleife machen will?
ich nehme an, die While-Schleife verarbeitet das Ergebnis. Das besteht dann aus 2 Spalten: Sprache und Anzahl, gruppiert nach Sprache.
Probier's doch einfach mal aus, am besten direkt durch Eingabe des SELECT in einer passenden Oberfläche.
Gruß Mia
echo $begrüßung;
select Sprache,count(*) ... group by Sprache.
Muß ich da nicht select distinct schreiben? Genügt das Group By wenn ich die Ausgabe in einer while Schleife machen will?
GROUP BY ist eine Klausel zum Zusammenfassen von Datensätzen. Für jeden unterschiedlichen Wert der gruppierten Spalte(n) wird eine Ergebniszeile erzeugt. Und man kann auf diese Gruppen Aggregat-Funktionen anwenden.
Außerdem hat MySQL ein Feature, das bei anderen Datenbanken als Bug gewertet wird: Man kann in der Ergebnismenge auch Spalten angeben, nach denen nicht gruppiert wurde. Allerdings ist der Wert dieser Spalten zufällig, da es ja pro Gruppe nur einer aus unter Umständen mehreren verschiedenen sein kann.
echo "$verabschiedung $name";