# [mysql] Datensätze in Gruppen gruppieren aber mehr als einen ausgeben



## BadKiss (6. September 2007)

Hallo.

Ich habe folgendes Problem:
Ich möchte gerne Datensätze, die den gleichen "namen" (auf serie bezogen) haben gruppieren und zb 12 Datensätze, die dann zb den namen Ayashi haben unter dieser Überschrift ausgegeben werden. Nur leider gibts bei mir immer nur einen Datensatz aus.

Hier mal mein Code:


```
SELECT * FROM lokoschade WHERE lokoschade_trade = 2 GROUP BY lokoschade_name ORDER BY lokoschade_name ASC
```

lokoschade = tabelle
lokoschade_trade = 1 nein 2 ja
lokoschade_name = die serie zb Ayashi

Ich möchte das jetzt so ausgeben, dass danach zb folgendes rauskommt:

Ayashi
1  2  3  4
5  6  7  8


Hier noch nen Bild, dass vielleicht klarer wird, wie ichs mein:

Der 1. Screenshot ist ein Beispiel, wies derzeitig aussieht, der 2. Screenshot ist ein Beispiel, wie's dann aussehen soll, dass also mehr als nur 1 Datensatz (hier ein Bild) ausgegeben wird.

Hoffe mir kann jmd helfen. Bin echt schon total am Verzweifeln


----------



## BadKiss (6. September 2007)

Kann mir den keiner helfen? 
Bin verzweifelt


----------



## Bernd1984 (7. September 2007)

Hallo,

du hast in deinem SQL ein GROUP BY, das dir dann pro Name auch nur 1 Datensatz ausgibt, aber das Ergebnis das du erwartest ist nicht gruppiert, jedenfalls nicht nur nach Name. Da gibt es doch sicher noch weitere Felder, die nicht identisch sind und dann bekommst du für jeden Name mehrere Datensätze ausgegeben.

Das Ergebnis das du möchtest ist mir aber noch nicht ganz klar





> Ayashi
> 1  2  3  4
> 5  6  7  8


 Was sind 1 bis 8? 
Die ID der Datensätze?
Mehrere Datensätze in einer Ergebnis-Zeile?


----------



## BadKiss (7. September 2007)

1-8 sollten die Bilder darstellen, sorry, dass ich das zu unverständlich hingeschrieben habe.
Das gemeinsame von allen Datensätzen ist ja der Name, ich unterscheide sie nur über die gfx (Name des Bildes).

Es sollen also nachher insgesamt 12 Bilder zu einem Block mit dem gleichen Namen zusammengefügt werden, allerdings weiß ich nicht, wie man das machen soll, da Group by ja nicht ganz das richtige ist. Es fasst zwar den Block mit den gleichen Namen zu einem zusammen, aber ich möchte diese wieder in die einzelnen Datensätze des Blockes aufteilen, sodass also wieder 12 Bilder rauskommen.


Hoffe man versteht was ich zu erklären versuche


----------



## Bernd1984 (10. September 2007)

Hallo,

du brauchst einen SQL der dir alle Datensätze aus der DB holt und zwar sortiert, das hast du ja schon fast.

```
SELECT distinct lokoschade_name, gfx FROM lokoschade WHERE lokoschade_trade = 2 GROUP BY lokoschade_name ORDER BY lokoschade_name ASC
```
Die von dir benötigte Blockbildung (4 Bilder pro Zeile) ist kein SQL-Problem, sondern das musst du in der Anwendung die du schreibst (mit jsp/asp/java/.net/?), um die Bilder anzuzeigen, machen.


----------



## BadKiss (10. September 2007)

Das Problem mit dem Umbrechen hab ich nicht, ich hab nur das Problem, dass immer nur der 1. Datensatz von 12 ausgegeben wird, also 12 Datensätze werden immer zu 1 Datensatz gruppiert.
Gibt es denn keine SQL-Anweisung, die das kann?
Oder ein PHP-Script, dass das kann ohne Tabelle?
Ich möchte die Datensätze nämlich gerne in einem Div einfügen, der nach dem 4. Datensatz automatisch einen Umbruch macht (wegen der Breite).


----------



## Bernd1984 (10. September 2007)

Hallo,

klar geht das mit SQL, der von mir gepostete SQL liefert pro Name und Bild einen Datensatz.

Ausserdem hätte dein SQL dir auch mehr als einen Datensatz zurückgeben müssen, es sei denn du hast nur einen Datensatz bei dem die Bedingung "lokoschade_trade = 2" zutrifft. Gruppiert wird ja nur wenn die auszugebenden Felder identisch sind.


----------



## BadKiss (10. September 2007)

Eigentlich haben immer mind. 12 Datensätze lokoschade_trade = 2  der einzige Unterschied dort ist, dass immer so 1-4 Datensätze dann lokoschade_present = 1 haben (1 = vorhanden).
Und mit der SQL-Anweisung gibt er mir immer nur den 1. Datensatz aus von den 12 eben.


----------



## BadKiss (10. September 2007)

Habs nun soweit hingebracht, dass es mir 12 Datensätze ausgibt, allerdings stimmt etwas noch immer nicht.
Ich poste mal meinen Code:


```
$sql = "SELECT * FROM lokoschade WHERE lokoschade_trade = 2 GROUP BY lokoschade_name ORDER BY lokoschade_name ASC;";
	$result = mysql_query($sql) OR die(mysql_error());
	$anzahl = mysql_num_rows($result);

if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
    while($row = mysql_fetch_assoc($result)) {
   			echo '<span class="bold">'.$row['lokoschade_serie'].' [<span class="uppercase">'.$row['lokoschade_name'].'</span>]</span><br /><div class="cardset">';
   			  $i = 1;
       		for ($i; $i <= 12; $i++)
       		{
           	if ($row['lokoschade_present'] == "1")
       			{
       			  echo '<img src="/image/lokoschade/'.$row['lokoschade_name'].'/'.$row['lokoschade_name']. $i.'.gif" alt="'.$row['lokoschade_name']. $i.'" /> ';
       			} else {
              echo '<img src="/image/lokoschade/search.gif" alt="'.$row['lokoschade_name']. $i.'" /> ';
            }
          }
    echo '</div><br /><br /><br />';
   	}
 	}
```

Und hier eine Beispielsseite, damit man sieht, wies aussieht:

Beispielseite


Hier geht mein Script irgendwie nur bei Kamikaze Kaito Jeanne, dort werden die Bilder, die lokoschade_present = 1 haben angezeigt, allerdings die search-Bilder nicht. Und bei den anderen Kategorien werden nur die search-Bilder angezeigt.

Mein Script geht irgendwie nicht in die bestimmte Codezeile


```
if ($row['lokoschade_present'] == "1")
       			{
       			  echo '<img src="/image/lokoschade/'.$row['lokoschade_name'].'/'.$row['lokoschade_name']. $i.'.gif" alt="'.$row['lokoschade_name']. $i.'" /> ';
       			} else {
              echo '<img src="/image/lokoschade/search.gif" alt="'.$row['lokoschade_name']. $i.'" /> ';
            }
```

Hat es vielleicht etwas mit meiner for-Schleife zu tun

Hoffe mir kann jetzt jmd weiterhelfen.


----------



## Bernd1984 (11. September 2007)

Hallo,

da du ja an deinem SQL nichts geändert hast, ist es wohl kein SQL-Problem, sondern ein PHP-Problem, das du auch im PHP-Forum posten kannst.

Für mich sieht es so aus als wenn die Bedingung 
	
	
	



```
if ($row['lokoschade_present'] == "1")
```
  nie erfüllt ist. 
Welchen Datentyp hat denn das Feld "lokoschade_present"?
Wenn es kein Numerische Datentyp, sondern ein Zeichenketten-Datentyp ist, könnte z.B. noch ein Leerzeichen mit im Feld vorhanden sein, so das die Bedingung dann nicht zutrifft.


----------



## BadKiss (13. September 2007)

So wie's aussieht, ist es wohl tatsächlich ein PHP-Fehler, allerdings hab ich das Programm jetzt schon mehrmals zerlegt, aber ich find den Fehler einfach nicht.

Ich hab so die Vermutung, dass sich irgendwie meine for- und if-Schleifen nicht vertragen!?
Zumindest bekomme ich einfach nicht das Ergebnis, dass ich haben möchte, obwohl meiner Meinung nach alles richtig ist.


----------

