Silja: MySQL - SELECT in SELECT oder wie löst man das?

Hallo!

Eine kleine Frage zu mySQL (5.1.53) - vereinfachtes Beispiel:

Ich habe eine Tabelle mit Spalten "Name" und "Symbol".
Nun kann jeder Name mehrere Symbole haben.

Name     Symbol
---------------
A        a
A        aa
B        b
C        c

Ich möchte, dass das Ergebnis dann so aussieht:

Name     Symbol
---------------
A        a, aa
B        b
C        c

Wenn es mehr als 3 Symbole gibt, dann sollen nur die ersten drei angezeigt werden.

Ich hätte es jetzt einfach mal so gemacht:

SELECT tabelle.Name FROM tabelle

	  
while ($Field = mysql_fetch_assoc($Result)) {  
	$Name = $Field["Name"];  
	[...]  
}

Und da drin (in der Schleife) dann nochmal ein SELECT mit WHERE-Klausel und nochmal eine Schleife. Das funktioniert so aber leider nicht (keine Rückmeldung vom lokalen Webserver mehr). Wie löst man das richtig?

  1. Hmm, nun hätte ich es mit GROUP_CONCAT versucht, aber dann erhalte ich folgenden Fehler:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_CONCAT([...]

    1. Hallo Silja,

      Hmm, nun hätte ich es mit GROUP_CONCAT versucht, aber dann erhalte ich folgenden Fehler:

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_CONCAT([...]

      Und wie sieht der Query aus den du an die Datenbank geschickt hast?

      btw: deine Einschränkung dass bei mehr als drei Symbolen nur die ersten drei angezeigt werden sollen kannst du mit GROUP_CONCAT() ohnehin nicht lösen.

      Gruß,
      Tobias

      1. Hi,

        btw: deine Einschränkung dass bei mehr als drei Symbolen nur die ersten drei angezeigt werden sollen kannst du mit GROUP_CONCAT() ohnehin nicht lösen.

        mit SUBSTRING_INDEX auf den GROUP_CONCAT müßte sich da aber was zusammenbauen lassen.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Hallo,

        Hmm, nun hätte ich es mit GROUP_CONCAT versucht, aber dann erhalte ich folgenden Fehler:

        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_CONCAT([...]

        Und wie sieht der Query aus den du an die Datenbank geschickt hast?

        SELECT tabelle.Name, tabelle.Symbol  
        		GROUP_CONCAT(tabelle.Symbol)  
        		FROM tabelle  
        		GROUP BY tabelle.Name
        

        Um es mal in die Bezeichnungen vom Beispiel im Ausgangsposting zu übersetzen.

        btw: deine Einschränkung dass bei mehr als drei Symbolen nur die ersten drei angezeigt werden sollen kannst du mit GROUP_CONCAT() ohnehin nicht lösen.

        Ich dachte, ich könnte dann vielleicht in PHP den String beim dritten Komma abschneiden, oder sowas in der Art. Aber wie gesagt, wie man sowas eigentlich lösen sollte, weiß ich eben nicht ...

        1. Hi,

          You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_CONCAT([...]

          Und wie sieht der Query aus den du an die Datenbank geschickt hast?

          SELECT tabelle.Name, tabelle.Symbol

            GROUP_CONCAT(tabelle.Symbol)  
            FROM tabelle  
            GROUP BY tabelle.Name
          
            
          Und dass da schlicht und einfach ein Komma fehlt, checkst du nicht selber?  
            
          MfG ChrisB  
            
          
          -- 
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          
          1. Hallo,

            Und dass da schlicht und einfach ein Komma fehlt, checkst du nicht selber?

            Danke für den freundlichen Hinweis.

            Nein, hab' ich nicht selber "gecheckt", sonst hätte ich's wohl nicht so gepostet. mySQL und PHP sind nicht gerade mein täglich Brot und ich steh' unter enormen Zeitdruck, das sind nicht immer die besten Bedingungen um perfekt zu arbeiten.

            Es klappt jetzt - Danke für eure Hilfe.