Hans: Anfängerfrage zu Select Statement

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

  1. 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"

    1. 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"

      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

      1. 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

        1. 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

  2. Hallo Hans,

    versuche mal deine beiden Ansätze zu kombinieren
    select Sprache,count(*) ... group by Sprache.

    Gruß Mia

    1. 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

      1. 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

      2. 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";