array und db-array

saila

Erfahrenes Mitglied
hi,

folgendes problem:

es gibt zwei tabellen in einer datenbank. in der ersten tabelle sind

TABELLE band_band:
id | band

in der zweiten tabelle

TABELLE bandtermin
id | band_id | datum | text | bild | usw...


der bezug für den join wird über id(tabelle band_band) und band_id (tabelle: bandtermin) hergestellt.

wenn ich das ganze nun per join ausgeben möchte und die option GROUP BY band dazu setze, bekomme ich ja lediglich nur zu jeder band eine ausgabe.

wie ist die ausgabe in html bzw. mit php zu erstellen, damit ich pro band alle termine nach aktuellem und künftigen datum erhalten?

ps: das mit dem datum ist bereits geklärt und wird mit der select abfrage automatisch erzeugt. es geht wirklich nur um die ausgabedarstellung. sprich eine band hat x termine und diese sollen wie folgt gelistet werden:

beispiel:
bandname
termin xy .............
termin yz .............
termin za.............

nächste band
termin xy .............
termin yz .............
termin za.............

weitere band
termin xy .............
termin yz .............
termin za.............

usw..

thanks für die unterstützung.

noch was, bisher hatte ich die ausgabe über ein array laufen. sprich ausgabe db in arrays und diese per foreach wieder ausgegeben. aber das problem ist, das a die ausgabe am ende nicht schön ist, weil leerzeilen folgen und b der erste bandname (logisch, weil index = 0 innerhalb des array) nicht auftaucht.
 
Du lässt einfach die Gruppierung weg und erhälst somit alle Termine und die zugehörige Band-ID. Sortieren tust Du erst nach Band und dann nach Termin. Anschließend durchläufst Du in einer Schleife alle Datensätze und gibst den Bandnamen nur aus, wenn sich die Band-ID ändert.

snuu
 
Du fragst die Daten wiefolgt ab:
Code:
select bb.id, bb.band, bt.termin
from band_band bb,
     bandtermin bt
where bb.id = bt.band_id
order by bb.band, bt.termin

Danach durchläufst Du alle Datensätze und gibst nur bei Änderung der ID der Band den Bandnamen aus.

snuu
 
ja cool, das hatte ich schon.

aber das ist ja gerade meine frage :) wie stellt man fest, wann sich eine id ändert, damit auch direkt am anfang die erste band ausgegeben wird............... ich steh so was von auf dem schlauch.......... das gibt es schon nicht mehr.............
 
PHP:
$letzte_id = -1;
while ($row = mysql_fetch_array($result)) {
  if ($letzte_id != $row['ID']) {    
    $letzte_id = $row['ID'];
    // Hier die Ausgabe der Band    
  }
  // Hier die aushabe der Termine
}
 
auch nicht, dann bekomme ich entweder nur den ersten bandnamen und danach keinen mehr und wenn ich es umstelle wieder alle bandnamen und das zu jedem termin.

............................
 
kein problem.

PHP:
<?php
	echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"3\" border=\"0\">";

	$today = date("Y-m-d");

	$cont = "SELECT * 
			 FROM 	band_band bb, 
			 		bandtermine bt 
			 		
			 WHERE 	bb.id = bt.band_id AND 
			 		datum >= '$today' 

			 ORDER BY band, datum"; 
			 
	$da = mysql_query($cont, $sql);
	$ids = -1;
	
	while ($e = mysql_fetch_array($da)) {
		if($ids != $e['bt.id']) {
			$ids = $e['bb.id'];
			echo "<tr><td colspan=\"4\" class=\"tb\" id=\"botta\"><b>".$e['band']."</b></td></tr>";
		}
		echo "<tr>
		      <td width=\"30\">&nbsp;</td>
			  <td width=\"80\" class=\"tde\" valign=\"top\">";
			  $d = explode("-", $e['datum']);
			  $datum = $d[2].".".$d[1].".".$d[0];
		echo "$datum</td>
		 	  <td class=\"tde\" valign=\"top\">"; 
		 	  	$text = nl2br($e['text']); 
		echo "$text</td>
			  <td width=\"150\" valign=\"top\"><span class=\"lay\">
				<a href=\"http://$inet[$element]\" target=\"_blank\">$inet[$element]</a>
				</span>
  			  </td>
			  </tr>";	
	}
	echo "</table>";
?>
 
Das geht so nicht:
PHP:
$e['bt.id']
Der Tabellenname wird nicht mit zurückgegeben. Du musst den reinen Feldbezeichner verwenden. Also:
PHP:
$e['id']
Wenn das nicht geht, dann schreibe ID gross. Es kommt darauf an, wie das Feld in der Datenbank geschrieben wird.

snuu
 
Zurück