Join mit leerer Tabelle

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

  • Join mit leerer Tabelle

    Hallo erstmal.

    Ich sitze im Moment daran ein Projekt für meine Schule fertig zu coden und bin ziemlich gestresst, weil ich 50% nochmal neu schreiben darf und selber nicht der php/mysql overskiller bin.


    Habe im Moment folgendes Problem:

    Ich habe 3 Tabellen.
    In der 1. Tabelle sind allgemeine Userdaten gespeichert.
    In der 2. und 3. Tabelle jeweils zusätzliche, optionale Informationen.

    Ich will, dass man nachträglich optionale Informationen editieren kann.
    Das Problem ist, dass wenn ich die 3 Tabellen joine, nichts mehr angezeigt wird. Bin recht ratlos....

    Das ganze sieht so aus: (bisschen gekürzt)

    PHP-Code:
    <?
    $lID=$_GET['id'];

    $sql = "SELECT * FROM
                    eh_schueler, eh_1, eh_2 WHERE eh_schueler.id=$lID
    AND eh_1.id=$lID AND eh_2.id=$lID";
        $result = mysql_query($sql) OR die(mysql_error());
        if(mysql_num_rows($result)) {
            while($row = mysql_fetch_assoc($result)) {

    echo "<b>Editieren</b>";
    echo
    "<form action=userupdate.php?ID=";
    echo "$lID";
    echo " method=post class=formular>

    <TABLE BORDER=0 WIDTH=100%>
           <TR>
           <TD>Vorname: </TD>
           <TD><INPUT TYPE=text NAME=v_name VALUE=";
    echo $row['v_name'];

    echo" ></TD>
           </TR>
    </table>"; ?>
    Gruß a3frankfurt

  • #2
    Zeig mal alle drei Tabellen mit dem Datensatz, den du dir erwartest.

    Würde dir gerne auch noch diesen Thread ans Herz legen:
    http://www.php-resource.de/forum/sho...threadid=28292

    Schau dir insbesondere mal ON, bzw USING() an.

    BTW: Warum wird der driss überhaupt in drei Tabellen abgelegt? Übernormalisiert?

    Kommentar


    • #3
      Das ganze wird eine Db wo sich ehemalige Schüler eintragen können.
      Die schule ist in 2 stufen unterteil, mittelstufe (eh_2) und oberstufe (eh_1). Deshalb 3 Tabellen.

      habe die tabellen nicht zur hand, poste sie morgen.

      danke trotzdem schonmal!

      Kommentar


      • #4
        1) Das DB-Layout ist mit ziemlicher Sicherheit Müll
        2) Stimmt es, dass beim JOIN immer nur eine der beiden Tabellen gefüllt ist? Dann ist dein INNER JOIN per definition ja schon total fehl am Platz. Probiers mit nem OUTER JOIN und alles wird gut. Hättest du aber auch mal vernünftig hinschreiben können und nicht nur nebenbei im Titel erwähnen... Naja.

        Kommentar


        • #5
          mh... will irgendwie nicht funktionieren.

          mit
          PHP-Code:
          $sql "SELECT * FROM
                          eh_schueler 
          LEFT OUTER JOIN eh_1.id ON eh_1.id=eh_schueler.id
          RIGHT OUTER JOIN eh_2.id ON eh_2.id=eh_schueler.id
          WHERE eh_schueler.id=
          $lID"
          bekomme ich die fehlermeldung:
          SELECT command denied to user 'xxx'@'xxx' for table 'id'


          ich darf die db leider nicht verändern...

          will den dreck nur zum laufen bringen um in informatik ne gute note fürs abi rauszuholen

          Kommentar


          • #6
            Von dem von dir gezeigten Code kann diese Meldung nicht stammen. Aber selbst wenn das Zeugs laufen sollte, gehört dem Lehrer, der dir dafür eine gute Note gibt, eins hinter die Löffel. Einfach so ein paar Hinweise
            • SELECT * FROM ist nicht nur schlecht, es behindert auch diejenigen, die dir helfen wollen
            • Formatier mal dein Zeugs anständig und konsistent, Anregungen dazu findest du z.B. bei Kropff
            • HTML-Tags werden klein geschrieben, nicht mal so und mal so
            • Die Abfrage auf mysql_num_rows() ist völlig überflüssig, da dann die Schleife einfach nicht durchlaufen wird und ja kein else-Teil vorhanden ist
            • Klammern fehlen
            • ...
            Wenn deine Abfrage anständig formatiert ist, sieht sie etwa so aus, und funktioniert auch (auch wenn die JOINS in diesem Fall natürlich keinen Sinn machen):
            PHP-Code:
            $sql "SELECT 
                        v_name
                    FROM
                        eh_schueler 
                    LEFT  JOIN 
                        eh_1.id ON eh_schueler.id = eh_1.id
                    LEFT JOIN 
                        eh_2.id ON eh_schueler.id = eh_2.id
                    WHERE 
                        eh_schueler.id = 
            $lID"
            Zuletzt geändert von H2O; 08.02.2008, 10:55.
            Gruss
            H2O

            Kommentar

            Lädt...
            X