abfragen und verbinden

Arbeite gerade an einer Abfrage für eine SEite die Konzerte von Bands auflistet. Momentan habe ich die Abfrage so gelegt, dass für jede Band die in der DB eingetragen ist eine Tabelle dargestellt wird in der jedes Konzertdatum eingetragen wird und wenn keine Konzerte in der DB sind "kein konzert" erscheint... Ich würde aber lieber die Darstellung so haben, dass Bands die keine Konzerte haben aktuell nicht angezeigt werden. Wie kann ich das bewerkstelligen ? Mir fehlt grad irgendwie der Überblick und die Idee dazu.

hier mein aktueller Quellcode


PHP:
<? 

include ('./admin/extras/dbconnect.inc.php');
mysql_select_db($database); 

$aktDatum = date("Y-M-d");

mysql_query("DELETE FROM hbrtours WHERE (date <= '$aktDatum')");


$bands_ausgabe = mysql_query("select * FROM hbrbands WHERE status='active' ORDER by name ASC"); 

$anzbands = mysql_num_rows($bands_ausgabe); 

?>
<link href="http://www.stillbelieve.de/horrorbiz/style_new.css" rel="stylesheet" type="text/css">
 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td class="pagetitle" valign="top">Shows/Tours</td> 
</tr> 
<tr> 
<td valign="top"> 
<?php 
$i=1; 

while($i<=$anzbands){ 
$bands = mysql_fetch_array($bands_ausgabe); 
$tours_ausgabe = mysql_query("SELECT *, DATE_FORMAT(date, '%M %D, %Y') AS meinDatum FROM hbrtours WHERE band_id = ".$bands[id]." ORDER BY date ASC"); 
echo "<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">\n"; 
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><span class=\"smalltitle\">".$bands[name]." - </span> <a class=\"smallred\" href=\"mailto:".$bands[email]."\">contact band</a></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n"; 
echo "<tr bgcolor=\"#CCCCCC\">\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Date</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"150\">City</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Country</td>\n"; 
echo "<td class=\"smalltitle2\" >Venue</td></tr>\n"; 








$anz_shows= mysql_num_rows($tours_ausgabe); 
if($anz_shows ==0) echo "<tr>\n<td class=\"text\" colspan=3> Sorry no dates right now </td>\n</tr>\n"; 
else 
for($j=1;$j<=$anz_shows;$j++) 
{ 
$show = mysql_fetch_array($tours_ausgabe); 
echo "<tr>\n"; 
echo "<td class=\"text\">".$show[meinDatum]."</td>\n"; 
echo "<td class=\"text\">".$show[city]."</td>\n"; 
echo "<td class=\"text\">".$show[country]."</td>\n"; 
echo "<td class=\"text\">".$show[venue]."</td>\n"; 
echo "</tr>\n"; 
} 

echo "</table></td>\n"; 
echo "</tr>\n"; 
echo "</table>\n"; 
$i++; 
} 
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
?></td> 
</tr> 
</table> 
<? 

?>
 
Du musst bei der Abfrage wo du die Bands abfragst noch abfragen ob auch ein Konzert dazu gehört. Das heisst nur die Bands abfragen die auch Konzerte haben.
 
Ich weiss nicht wie deine DB aufgebaut ist, aber du kannst es so machen:

PHP:
<?
while($i<=$anzbands){ 
$bands = mysql_fetch_array($bands_ausgabe); 
$tours_ausgabe = mysql_query("SELECT *, DATE_FORMAT(date, '%M %D, %Y') AS meinDatum FROM hbrtours WHERE band_id = ".$bands[id]." ORDER BY date ASC"); 
$anz_shows= mysql_num_rows($tours_ausgabe); 
if ($anz_shows > 0) {
echo "<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">\n"; 
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><span class=\"smalltitle\">".$bands[name]." - </span> <a class=\"smallred\" href=\"mailto:".$bands[email]."\">contact band</a></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n"; 
echo "<tr bgcolor=\"#CCCCCC\">\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Date</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"150\">City</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Country</td>\n"; 
echo "<td class=\"smalltitle2\" >Venue</td></tr>\n"; 

for($j=1;$j<=$anz_shows;$j++) 
{ 
$show = mysql_fetch_array($tours_ausgabe); 
echo "<tr>\n"; 
echo "<td class=\"text\">".$show[meinDatum]."</td>\n"; 
echo "<td class=\"text\">".$show[city]."</td>\n"; 
echo "<td class=\"text\">".$show[country]."</td>\n"; 
echo "<td class=\"text\">".$show[venue]."</td>\n"; 
echo "</tr>\n"; 
} 

echo "</table></td>\n"; 
echo "</tr>\n"; 
echo "</table>\n"; 
$i++; 
} 
}
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
?></td> 
</tr> 
</table> 
<? 

?>
 
Zuletzt bearbeitet:
Mit PHP hat die Abfrage eigentlich nichts zu tun. Das sind SQL-Grundlagen. Damit solltest Du Dich zwangsläufig auch beschäftigen.

So kannst Du beispielsweise zwei Tabellen verknüpfen:
Code:
SELECT bands.feld1, bands.feld2, tours.feld3
FROM bands, tours
WHERE bands.bands_id = tours.bands_id

Die SQL-Abfrage würde Dir alle Bands und deren Tourdaten ausgeben, falls auch Touren vorhanden sind.

@aquasonic: Bei Deiner Variante wird je Band ein weiteres SQL-Statement abgesetzt. Funktioniert zwar auch, jedoch ist es unperformant.

snuu
 
Ja da hast du recht...Ich betonte ja auch, "wie du es auch machen könntest". Kannst du denn auch in einer SQL-Abfrage die mysql_num_rows einbauen? Wie willst du sonst in einem SQL-Statement sein Problem lösen?
 
Original geschrieben von aquasonic
Ich weiss nicht wie deine DB aufgebaut ist, aber du kannst es so machen:

PHP:
<?
while($i<=$anzbands){ 
$bands = mysql_fetch_array($bands_ausgabe); 
$tours_ausgabe = mysql_query("SELECT *, DATE_FORMAT(date, '%M %D, %Y') AS meinDatum FROM hbrtours WHERE band_id = ".$bands[id]." ORDER BY date ASC"); 
$anz_shows= mysql_num_rows($tours_ausgabe); 
if ($anz_shows > 0) {
echo "<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">\n"; 
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><span class=\"smalltitle\">".$bands[name]." - </span> <a class=\"smallred\" href=\"mailto:".$bands[email]."\">contact band</a></td>\n"; 
echo "</tr>\n"; 
echo "<tr>\n"; 
echo "<td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n"; 
echo "<tr bgcolor=\"#CCCCCC\">\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Date</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"150\">City</td>\n"; 
echo "<td class=\"smalltitle2\" width=\"75\">Country</td>\n"; 
echo "<td class=\"smalltitle2\" >Venue</td></tr>\n"; 

for($j=1;$j<=$anz_shows;$j++) 
{ 
$show = mysql_fetch_array($tours_ausgabe); 
echo "<tr>\n"; 
echo "<td class=\"text\">".$show[meinDatum]."</td>\n"; 
echo "<td class=\"text\">".$show[city]."</td>\n"; 
echo "<td class=\"text\">".$show[country]."</td>\n"; 
echo "<td class=\"text\">".$show[venue]."</td>\n"; 
echo "</tr>\n"; 
} 

echo "</table></td>\n"; 
echo "</tr>\n"; 
echo "</table>\n"; 
$i++; 
} 
}
echo "<tr>\n"; 
echo "<td height=\"8\"></td>\n"; 
echo "</tr>\n"; 
?></td> 
</tr> 
</table> 
<? 

?>


bei der variante bekomm ich nur nen fehler in zeile 28 dass es kein zulässiges ergebnis ist.. woran kann das liegen ? die abfrage selbst ist doch eigentlich die selbe wie vorher.
 
Argh, wie ich es liebe. Achtung ich werde jetzt ausfallend, bitte habt Nachsicht.

Das Thema "yxz is not a valid result resource" hatten wir schon ca zwei Milliarden mal. Man gebe einfach mal valid result resource in die Suche im PHP Forum ein und staune, was da für wahnsinnig revoluzionäre Lösungsvorschläge gepostet werden ...

So, Kesseldruck wieder im Normalbereich.
 
Zurück