wuscheck: Kein Ergebnis bei verschachteltem SELECT

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>&nbsp;</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='&nbsp;&nbsp;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>&nbsp;</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='&nbsp;&nbsp;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

  1. 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