Kein Ergebnis bei verschachteltem SELECT
wuscheck
- datenbank
Hallo Gemeinde,
ich habe derzeit das Problem dass keine der beiden nachfolgenden Codes (Die Ausgabe des Ergebnisses ist identisch) zum Ziel führt, nämlich bei Vorkommen des Teams in der 2. Abfrage die else-Anweisung ausgeführt wird... Beide Abfragen für sich funktionieren einwandfrei...
----------------------Code 1----------------------
<?php //------------------Abfrage 1---------------
$query9="SELECT team FROM tvk_ergebnis_temp GROUP BY team";
$result9=mysql_query($query9) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden!");
while ($row9 = mysql_fetch_array ($result9)) {
$team2 = $row9 ["team"];
//--------------------Abfrage 2-------------------
$query="SELECT id, team FROM tvk_ergebnis_teams WHERE team='$team2';";
$result=mysql_query($query) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden!");
$anzahl=mysql_numrows ($result);
if ($anzahl!="") {
while ($row = mysql_fetch_array ($result)) {
$id = $row ["id"];
$team = $row ["team"];
echo "<tr class='Stil4'><td>$team2</td><td>$team</td><td>$id</td><td><div align='center'><img src='haken.gif' border='0'></div></td><td> </td></tr>";
} }
else {
echo "<form name='form1' method='post' action='speichern.php?team=$team2&saison=$saison&tvkteam=$tvkteam&kuerzel=$kuerzel'>";
echo "<tr class='Stil4'><td>$team2</td><td>nein</td><td>nein</td><td><img src='cross.gif' border='0'></td><td><input style='font: 10pt arial, helvetica, sans-serif; text-decoration: none; color: #000000; background-image:url(disk.gif); background-repeat:no-repeat; background-position: 1px 1px;' name='speichern' type='submit' value=' speichern'></div></td></tr>";
echo "</form>";
} }
//-----------------Code 1 Ende--------------------
?>
---------------------Code 2-----------------
<?php //---------------------Abfrage 1-----------------
//
$query="SELECT team AS mannschaft FROM tvk_ergebnis_temp GROUP BY team";
$result=mysql_query($query) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden! - Select1");
while ($row = mysql_fetch_array ($result)) {
$mannschaft = $row ["mannschaft"];
$team="";
$id="";
$team2 = $row9 ["team"];
//--------------------Abfrage 2-------------------
$query1="SELECT id, team FROM tvk_ergebnis_teams WHERE team='$mannschaft'";
$result1=mysql_query($query1) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden! - Select2");
while ($row = mysql_fetch_array ($result1)) {
$id = $row ["id"];
$team = $row ["team"];
}
if ($team!="") {
echo "<tr class='Stil4'><td>$mannschaft</td><td>$team</td><td>$id</td><td><div align='center'><img src='haken.gif' border='0'></div></td><td> </td></tr>";
}
else {
echo "<form name='form1' method='post' action='speichern.php?team=$team2'>";
echo "<tr class='Stil4'><td>$anzahl - $mannschaft</td><td>nein</td><td>nein</td><td align='center'><img src='cross.gif' border='0'></td><td><input name='speichern' type='submit' value=' speichern'></div></td></tr>";
echo "</form>";
} }
//-----------------Code 2 Ende--------------------
?>
Any ideas bzw. any grobe Schnitzer gefunden? Danke im Voraus für Eure Hilfe...
Gruss
wuscheck
Hallo
ich habe derzeit das Problem dass keine der beiden nachfolgenden Codes (Die Ausgabe des Ergebnisses ist identisch) zum Ziel führt, nämlich bei Vorkommen des Teams in der 2. Abfrage die else-Anweisung ausgeführt wird... Beide Abfragen für sich funktionieren einwandfrei...
----------------------Code 1----------------------
<?php //------------------Abfrage 1---------------
$query9="SELECT team FROM tvk_ergebnis_temp GROUP BY team";
$result9=mysql_query($query9) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden!");
while ($row9 = mysql_fetch_array ($result9)) {
$team2 = $row9 ["team"];
//--------------------Abfrage 2-------------------
$query="SELECT id, team FROM tvk_ergebnis_teams WHERE team='$team2';";
Du möchtest also "id" und "team" aus der Tabelle tvk_ergebnis, sortiert nach
"team", aber nur für die "team"-Einträge, die auch in tvk_ergebnis_temp vorkommen?
Wozu dieser Aufwand mit den zwei SQL-Statements? Warum teure SQL-Statements in einer Schleife an die DB absenden? Das ist doch völlig unnötig!
SELECT
id,
team
FROM
tvk_ergebnis_teams teams
INNER JOIN tvk_ergebnis_temp tmp
ON teams.team = tmp.team
ORDER BY tmp.team
Ein kleiner INNER JOIN und die Abfragen in der Schleife werden überflüssig.
Natürlich muss jetzt die Logik in der Anwendung überprüfen, ob sich der Eintrag in "team" ändert. Das ist eine billige if-Anweisung in Deiner Anwendung.
$result=mysql_query($query) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden!");
$anzahl=mysql_numrows ($result);
if ($anzahl!="") {
$anzahl enthält eine Zahl. Diese vergleichst Du mit dem Leerstring. Kein Wunder, wenn immer nur der if-Zweig ausgeführt wird.
0 ist etwas anderes als "" :-)
Any ideas bzw. any grobe Schnitzer gefunden? Danke im Voraus für Eure Hilfe...
Die zweite Codewüste habe ich mir nicht mehr durchgeschaut, aber da sieht es ähnlich aus.
Freundliche Grüße
Vinzenz
PS: Einen kleinen Einblick in die Joins findest Du z.B. im Archiv