zusammengehoerige daten aus 2 tabellen auslesen und darstellen

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

  • zusammengehoerige daten aus 2 tabellen auslesen und darstellen

    hallo

    ich bin nach wie vor relativ unwissend in php, mache aber -nicht zuletzt dank dieses forums bzw brainbug- fortschritte

    meine frage heute:

    nehmen wir an ich habe 2 tabellen in einer db, in der einen
    wäre nur das feld id und z.b. url und in der anderen
    id und meinentwegen bewertung....

    1. wie muss dann meine datenbankabfrage (an mysql) lauten damit ich die daten aus den beiden tabellen auslesen kann und sie in zusammenhang bringen kann....identisch wäre wohl in dem fall immer die id...

    2. wie muesste das passende formular aussehen um wiederum
    diese daten einzuspeichern (z.b. user übermittelt link,
    und bewertung ... oder bewertung folgt erst nach aber die id muss in der bewertungstabelle angelegt werden)

    ich wäre euch für jede anregung dankbar

    viele gruesse

    tm

  • #2
    hallo tm,

    das ist eigentlich relativ einfach. Am besten Du besorgst dir eine gute Doku zum Thema SQL-Syntax (z.B. unter http://www.mysql.com). In deinem Fall würde die SQL-Anweisung irgendwie so aussehen:

    select * from Tabelle1 inner join Tabelle2 on Tabelle1.id=Tabelle2.id

    Dann bekommst Du eine Ergebnismenge zurück, die die Spalten beider Tabellen enthält. Das zurückschreiben in die Datenbank erfolgt dann wieder anhand der id:

    update Tabelle1 set Spaltexy=irgendwas where id=DieIdVonOben

    Überlege die aber vorher genau, wie du die beiden Tabellen aufbauen möchtest. Tabelle1 enthält zum Beispiel irgendwelche Ereignisse und Tabelle2 enthält in einer 1:n-Beziehung die Bewertungen dazu. Oder irgendwie so.

    Hoffe, Dir ein bisschen weitergeholfen zu haben.

    Viele Grüße, Patrick

    Kommentar


    • #3
      hallo patrick,

      ich hab hier das php buch vom jörg krause incl mysql referenz aber irgendwie mag ich seinen stil (noch?)
      nicht und das buch ist recht schwer und trocken zu lesen daher bin ich noch nicht so weit gekommen ;-)

      ich denke du hast mir auf jeden fall schon ein ganzes stück weitergeholfen....vielleicht kannst du mir noch mit der syntax helfen, wenn das ganze in einen array gehen soll..muss der irgendwie speziell aussehen oder ist es nachdem die beiden tabellen gejoint werden irrelevant?

      vielen dank für die hilfe,

      andré

      Kommentar


      • #4
        hmmmmmm...kannst du mir vielleicht mit der query noch helfen? ich krieg das nicht so wirklich hin...

        danke

        andre

        Kommentar


        • #5
          Code:
          $query="select * from tabelle1 left join tabelle2 on tabelle1.id = tabelle2.id";  // hier kannst du noch ein WHERE-Teil anhängen oder z.B. "order by id"
          $abfrage=mysql_query($query);
          while($daten=mysql_fetch_array($abfrage)) {
             echo $daten[url]." mit Bewertung ".$daten[bewertung];
             }
          mit "left join" verbindest du beide Tabellen zugunsten der linken Tabelle, hier also Tabelle1, d.h. nur die Einträge von Tabelle1 werden über die id mit vorhandenen Einträgen der Tabelle2 verknüpft. Einträge in Tabelle2, die z.B. darüberhinaus vorhanden sind, werden so nicht selektiert.

          Ich benutze den Query eigentlich immer, da bei mir der inner join noch nie das richtige Ergebnis gebracht hat. Keine Ahnung, warum, aber so wars bis jetzt.

          Kommentar


          • #6
            DANKE )))) Super ich werds gleich heute nachmittag ausprobieren....)

            danke nochmal

            andre

            Kommentar


            • #7
              hmmmmm

              hallo...ok ich hab
              das jetzt mal ausprobiert und es funktioniert beinahe ;-)

              bis jetzt sieht das so aus:

              Code:
              
              $query="select * from tabelle1 left join tabelle2 on tabelle1.id = tabelle2.id" ;  
              
              $abfrage=mysql_query($query);
              while($daten=mysql_fetch_array($abfrage)) {
                 echo "<br>";
                 echo "Titel: ".$daten[titel];
                 echo "<br><br>";
                 echo "Kommentar: ".$daten[kommmentar];
                 echo "<br><br>";
                 echo "Hits: " .$daten[hits];
                 echo "<br><br><hr>";
                    }
              
              printf($ausgabe);
              der titel (oder eben url) wird korrekt ausgegeben,
              die hits (aus tabelle1) auch nur den kommentar (bewertung) gibt er nicht her....der "join" scheint aber zu klappen weil andere werte aus tabelle 2 ausgelesen werden können

              die tabelle für kommentar sieht in etwa so aus


              Code:
              id int(10) DEFAULT '0' NOT NULL,
              kommentar text NOT NULL,
              kommentarnummer int(11) DEFAULT '0' NOT NULL auto_increment,
              PRIMARY KEY (kommentarnummer),
              KEY id (id)


              danke

              andre

              Kommentar


              • #8
                vielleicht nur das Feld "kommentar" nicht als "kommmentar" schreiben -> hast du mit 3 m geschrieben. Wäre für mich Grund genug, daß nicht zu machen und lieber nix ausgeben.

                also, probiers mal mit $daten[kommentar]

                falls es daran auch nicht liegt und das nur beim posten ein Fehler war, dann müssen wir nochmal drüberschauen, gib Bescheid....

                Kommentar


                • #9
                  ich liebe dieses forum ich bin so blöd..klar war´s das..ich habs mehrmals durchgelesen und jedesmal übersehen...sorry fürs umsonst posting....
                  jetzt funktionier es....

                  vielleicht weiss auch noch jmd (falls es nicht zuviel
                  zeit in anspruch nimmt) wie ich es anstelle
                  dass jetzt eine "fundstelle" (datensatz?) für welche
                  ein kommentar existiert nicht mehrfach ausgegeben wird
                  wie es jetzt der fall ist:

                  Code:
                  Titel: Test
                  
                  Kommentar: Testkommentar 1
                  
                  Hits: 204
                  
                  --------------------------------------
                  
                  Titel: Test
                  
                  Kommentar: Testkommentar 2
                  
                  Hits: 204
                  
                  --------------------------------------
                  Titel: Test
                  
                  Kommentar: Testkommentar 3
                  
                  Hits: 204
                  
                  --------------------------------------
                  so in etwa sieht die ausgabe aus bei dem
                  fall dass der titel test 3 kommentare erhalten hat
                  wie aber kann ich ihn -wenn überhaupt- dazu bringen
                  das zusammenzufassen, meinentwegen mit einem extra
                  array (danke brainbug ;-) ..
                  ich hoffe ich nerve nicht...ich versuche einfach
                  code schnipsel zu analyisieren, vorhandene
                  tabellen weiterzuverarbeiten, neue zu schaffen
                  und daraus für mich zum lernen ein programm zu erschaffen...


                  viele gruesse & vielen dank

                  andre



                  Kommentar


                  • #10
                    Code:
                    $query="select * from tabelle1 left join tabelle2 on tabelle1.id = tabelle2.id" ;  
                    
                    $abfrage=mysql_query($query);
                    $i=0;
                    while($daten=mysql_fetch_array($abfrage)) {
                       if (in_array($daten[titel],$data)) {
                          $num=array_search($daten[titel],$data);
                          $data[$num][kommentar]+=" , ".$daten[kommentar];   // in "" steht die Trennung der Kommentare
                    	  }
                       else {
                          $data[$i][titel]=$daten[titel];
                          $data[$i][kommentar]=$daten[kommentar];
                          $data[$i][hits]=$daten[hits];
                          $i++;
                    	  }
                       }
                    
                    for ($z=0;$z<$i;$z++) {   
                       echo "<br>";
                       echo "Titel: ".$data[$z][titel];
                       echo "<br><br>";
                       echo "Kommentar: ".$data[$z][kommentar];
                       echo "<br><br>";
                       echo "Hits: " .$data[$z][hits];
                       echo "<br><br><hr>";
                          }
                    allerdings weiß ich nicht bzw. habs noch nicht ausprobiert, ob in_array und array_search in einem mehrdimensionalen Array funktioniert. Falls nicht, muß ich erstmal drüber nachdenken, wie man das am geschicktesten löst.

                    P.S.: Falls es nicht klappt, kannst du dich mal an Berni oder an Titus wenden, die haben auch immer gute Ideen

                    Kommentar


                    • #11
                      hmm ich bekomme die fehlermeldung


                      Fatal error: Call to unsupported or undefined function in_array() in /blablalba/2/dasdsadsa/htdocs/jointest/join.php3 on line 1

                      scheint dass dieses in_array nicht so ganz funktioniert? du musst dir aber jetzt deswegen keinen stress machen..wenn du ne lösung haben solltest freu ich mich

                      danke und gruesse

                      andre

                      Kommentar


                      • #12
                        läuft bei dir kein PHP4 ?? in_array() ist eine PHP4-Funktion. Bei array_search() muß ich selbst erst mal nachschauen.

                        Wenn PHP3, dann mußt du den Abfrage-Teil abändern:
                        Code:
                        while($daten=mysql_fetch_array($abfrage)) {
                           $weiter=false;
                           for ($m=0; $m<$i; $m++) {
                              if ($data[$m][titel]==$daten[titel] && $data[$m][hits]==$daten[hits]) {
                        	     $data[$m][kommentar]+=" , ".$daten[kommentar];   // in "" steht die Trennung der Kommentare
                        		 $weiter=true;
                        		 break;
                        		 }
                              }
                           if (weiter==false) {
                              $data[$i][titel]=$daten[titel];
                              $data[$i][kommentar]=$daten[kommentar];
                              $data[$i][hits]=$daten[hits];
                              $i++;
                        	  }
                           }
                        ja, ich denke, so könnte es gehen. Versuchs mal. Falls es nicht klappt, werde ich wohl erst morgen früh wieder hier im Forum sein...

                        Kommentar


                        • #13
                          ok ich werds mal ausprobieren..komme leider erst heute abend dazu...aber auf dem server läuft php4...die endung
                          ist ein wenig irreführend, ich gebs zu, aber dem parser müssts eigentlich egal sein, oder?

                          danke

                          andre

                          Kommentar


                          • #14
                            klar, der Parser nimmt das, was in der php.ini eingestellt ist, meist ist das .php, .php3 oder .phtml

                            dann lag der Fehler vielleicht doch am mehrdim. Array in Zusammenhang mit in_array() - egal, jetzt hast du ja ne andere Variante...

                            Kommentar


                            • #15
                              ok..ich sag nochmal danke und werds gleich heute testen..
                              :-) ich meld mich ganz sicher wieder ;-))

                              andre

                              Kommentar

                              Lädt...
                              X