Zugrunde liegende Tabelle auf Inhalt testen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zugrunde liegende Tabelle auf Inhalt testen

    Ich mache folgende Anfrage an der Server. Ich will jetzt aber sagen, wenn die zugrunde liegende Tabelle, in der Bilder sind, die auf die Wettkämpfe verweisen, keine Daten enthält soll er hier schon die jeweiligen Datensätze nicht mehr anzeigen. Die zugrunde liegende Tabelle wird mit einer anderen Funktioin ausgelesen.

    PHP-Code:
    function show_bilder(){
        
    $sql "SELECT wettkampfid, wettkampfname, DAYOFMONTH(wettdatum), MONTH(wettdatum), YEAR(wettdatum), ";
        
    $sql = ."source, alt, bemerkung FROM wettkampf, ort, nation,bild WHERE nationen_id=nationid ";
        
    $sql "AND nationid=nation_id AND ortid=ort_id AND bildtitel LIKE '%klein%' ORDER BY wettdatum DESC";
                
        
    $this->res mysql_query($sql,$this->currDB);
            
        
    $anzahl mysql_num_rows($this->res);
            
        if (
    $anzahl>0) {
            echo 
    "<table>
              <tbody>"
    ;
              
            while (
    $row mysql_fetch_array($this->res))
                {
                 echo 
    "<tr> 
                <td>"
    .$row[2].".".$row[3].".".$row[4]."</td>
                <td><img src='"
    .$row[5]."' alt='".$row[6]."' ></td>
                <td><a href='wettkampf.php?wettkampf="
    .$row[0]."'>".$row[1]."</a></td>
                <td>"
    .$row[7]."</td></tr>";
                }
            echo 
    "</tbody></table>";
            }
            else {
            echo 
    "Keine Einträge vorhanden";
            }


  • #2
    du meinst
    PHP-Code:
    $sql .= "... nationid=$nation_id AND ortid=$ort_id ..."
    Und zur Lösung des Problems würden die Schemata deiner Tabellen helfen.. Mir zumindest.

    Kommentar


    • #3
      Nein also das was drinnen steht gehört schon so, weil es mehrere tabellen vereinigt und die jeweiligen Einzelwerte der Tabellen übereinstimmen sollen.

      So nun zu den Schemata der Tabellen:

      Tabelle Bild:


      Tabelle Wettkampf:


      Tabelle Nation:


      Tabelle Orte:


      Was gemacht werden soll:
      Die Wettkämpfe werden, per obiger Funktion (show_bilder), angezeigt, nach Datum sortiert.
      Die Funktion sorgt dabei, dafür das nicht das wirkliche karthesische Produkt gebildet wird, sondern eben nur die Wettkämpfe, die mit den Orten und Nationen bzw. den dazu gehörigen Bildern übereinstimmen.

      Ausgeschrieben würde sie so aussehen:
      PHP-Code:
      $sql "SELECT wettkampf.wettkampfid, wettkampf.wettkampfname, DAYOFMONTH(wettkampf.wettdatum),
       MONTH(wettkampf.wettdatum), YEAR(wettkampf.wettdatum), "
      ;
      $sql = ."bild.source, bild.alt, wettkampf.bemerkung FROM
       wettkampf, ort, nation,bild WHERE ort.nationen_id=nation.nationid "
      ;
      $sql "AND nation.nationid=bild.nation_id AND ort.ortid=wettkampf.ort_id AND bild.bildtitel
       LIKE '%klein%' ORDER BY wettkampf.wettdatum DESC"


      Wenn man auf einen Wettkampf klickt, sorgt eine weitere Funktion, auf einer nächsten Seite, dafür, dass man die Bilder aus dem Wettkampf sieht.
      Der Wettkampf soll aber auf der vorherigen Seite nicht angezeigt werden, wenn es keine Bilder dazu gibt.

      Kommentar


      • #4
        Joins

        Irgendwie fehlen mir in deinem Schema die Relationen. Ich würde dir empfehlen die Sachen mit den JOINS nochmal durchzulesen.

        Zum Problem:

        Du möchtest, dass NUR Wettkämpfe mit Bilder angezeigt werden???

        SELECT t1.bildid,... t2.wettkampfname FROM bild t1 LEFT JOIN wettkampf t2 ON (t1.wettkampf_id = t2.wettkampfid) WHERE ........

        MFG

        DigitalDoener

        Kommentar


        • #5
          Ich find das Schema der Datenbank relativ klar. Primary Key (Schlüsselzeichen) & Foreign Key (grünes Karo) & Query --> Schema.

          Joins und Tabellen übergreifende Abfragen check ich schon.
          Die Joins die du vorschlägst geben alle Bilder aus und dazu die jeweiligen
          Wettkämpfe. Also:

          [FONT=courier new][COLOR=blue]
          bildid-|-wettkampfname-|-datum
          1------|-Oberzarten----|2005-02
          2------|-Oberzarten----|2005-02
          3------|-Oberzarten----|2005-02
          .
          .[/COLOR]
          [/FONT]

          Eine Zeile wie die nächste wird nicht angezeigt, weil die bildid NULL ist.

          [FONT=courier new][COLOR=blue]
          bildid-|-wettkampfname-|-datum
          NULL----|-Garmisch-----|2005-01
          .[/COLOR]
          [/FONT]

          Ich hätt aber gerne die die Orte der Wettkämpfe da stehen und zwar nur dann wenn es dazu auch Bilder gibt.

          [FONT=courier new][COLOR=blue]
          wettkampfname-|-datum
          Oberzarten----|2005-02
          .[/COLOR]
          [/FONT]

          Die folgende Reihe nicht:

          [FONT=courier new][COLOR=blue]
          wettkampfname-|-datum
          Garmisch------|2005-01[/COLOR]
          [/FONT]

          Das es ja dazu keine Bildeer gibt. Ist das irgendwie verständlich??

          Kommentar

          Lädt...
          X