mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 10.12.2016 02:22 Benutzername: Passwort: Auto-Login

Thema: Beziehung zwischen DB tabellen verbinden. vom 22.11.2006


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Beziehung zwischen DB tabellen verbinden.
Seite: 1, 2, 3  Weiter
Autor Nachricht
new001
Threadersteller

Dabei seit: 16.02.2006
Ort: Sundern
Alter: 29
Geschlecht: Männlich
Verfasst Mi 22.11.2006 18:31
Titel

Beziehung zwischen DB tabellen verbinden.

Antworten mit Zitat Zum Seitenanfang

Hallo MG-User,

ich habe ein Problem mit dem verbinden einzeler DB Tabellen untereinander.
Um dies mal zu verdeutlichen habe ich eine Grafik beigelegt:




Ich trage in die "kurseintrag" tabelle nur zahlen ein. -> dann möchte ich das diese einzelnen Zahlen mit den anderen verbunden werden und den namen ausgeben.

wie kann ich die tabelle kurseintrag mit den anderen verbinden so das die zb. reine ID aus kurseintrag dargestellt wird?

ich habe zwar schon einiges gescripptet, aber da kam nur mist bei rum. -->>
Dies war nur für den Tag Dienstag... dieser sollte nach der Uhrzeit sortieren an denen die Kurse stattfinden.
er hat mir zwar dienstag angezeigt aber hat dann bei allen einträgen immer nur die erste zeile der tabelle genommen.


Code:
<?php
require_once('config.php');
$tag2 = mysql_query("SELECT eintragtag, kurstag FROM kurseintrag, kurstage WHERE eintragtag = '2'");
$kurs2 = mysql_query("SELECT eintragkurs, kursname, bild FROM kurseintrag, kurse WHERE eintragkurs = KID");
$trainer2 = mysql_query("SELECT eintragtrainer, trainername FROM kurseintrag, trainer WHERE eintragtrainer = TID");
$zeit2 = mysql_query("SELECT eintragzeit FROM kurseintrag ORDER BY eintragzeit ASC");
$raum2 = mysql_query("SELECT eintragraum, raumname FROM kurseintrag, raum WHERE eintragraum = RID");
while($rowkurs2 = mysql_fetch_array($kurs2))
   {
      while($rowtag2 = mysql_fetch_array($tag2))
         {
            while($rowtrainer2 = mysql_fetch_array($trainer2))
               {
                  while($rowzeit2 = mysql_fetch_array($zeit2))
                     {
                        while($rowraum2 = mysql_fetch_array($raum2))
                           {
                              echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
                                     <tr>
                                             <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
                                         <tr>
                                           <td><img src=\"upload/".$rowkurs2['bild']."\" height=\"57\" width=\"120\"></td>
                                         </tr>
                                         <tr>
                                           <td>".$rowkurs2['kursname']."</td>
                                      </tr>
                                      <tr>
                                       <td>".$rowtrainer2['trainername']."</td>
                                      </tr>
                                      <tr>
                                       <td>".$rowzeit2['eintragzeit']."</td>
                                      </tr>
                                      <tr>
                                       <td>".$rowraum2['raumname']."</td>
                                      </tr>
                                    </table></td>
                                   </tr>
                                      </table>";
                           };
                     };
               };
         };
      };

?>
  View user's profile Private Nachricht senden
dr13.de

Dabei seit: 21.11.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 22.11.2006 22:02
Titel

Antworten mit Zitat Zum Seitenanfang

Was hast du vor? Etwas in dieser Richtung:

Code:

select * from kurseintrag
left join kurse on kurseintrag.eintragkurs = kurse.kid
left join trainer on kurseintrag.eintragtrainer = trainer.tid
left join raum on kurseintrag.eintragraum = raum.rid
left join tage on kurseintrag.eintragtag = tage.did
WHERE [i]hier kommen die Bedingungen hin[/i]


Mir ist nicht klar, was du mit den vielen Selects willst.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
new001
Threadersteller

Dabei seit: 16.02.2006
Ort: Sundern
Alter: 29
Geschlecht: Männlich
Verfasst Mi 22.11.2006 22:26
Titel

Antworten mit Zitat Zum Seitenanfang

left join kenn ich garnicht... bin noch anfänger in dem bereich. hab zwar n buch davon aber mit left join usw steht da garnicht drin..


was ich vor hab..

in eine HTML tabelle steht
Dienstag

und in Dienstag sollen alle kurse mit dazugehörigem trainer uhrzeit usw aufgelistet werde. daher in der ersten selectanweisung am schluss "...='2'" da die 2 für dienstag steht... dachte alle darauf folgenden befehle beziehen dann nur aus der zeile wo für eintragtag 2 eingetragen ist... aber scheinbar wars ja nicht so...

ich mach mich mal schlau was das mit dem left join auf sich hat *zwinker*
thx.
  View user's profile Private Nachricht senden
dr13.de

Dabei seit: 21.11.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 22.11.2006 22:40
Titel

Antworten mit Zitat Zum Seitenanfang

Wenn du alle Kurseinträge, welche an einem Montag stattfinden anzeigen willst, sähe das Select wohl so aus:
Code:

select kurseintrag.id, kurse.name as kursname, trainer.name as trainername, raum.name as raumname, tage.name as tagname from kurseintrag
left join kurse on kurseintrag.eintragkurs = kurse.kid
left join trainer on kurseintrag.eintragtrainer = trainer.tid
left join raum on kurseintrag.eintragraum = raum.rid
left join tage on kurseintrag.eintragtag = tage.did
WHERE kurseintrag.eintragtag = 1

Wichtig ist die WHERE-Anweisung. Diese filtert nur die Einträge an einem Montag (eintragtag = 1) heraus. Für einen Dienstag wäre das dann ganz einfach kurseintrag.eintragtag = 2

Das Select würde also in unserem Beispiel (basierend auf deiner Grafik) folgendes zurückgeben:
Code:

id | kursname | trainername | raumname   | tagname
------------------------------------------------------
2  | out      | chris       | Kursraum 2 | Montag
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
new001
Threadersteller

Dabei seit: 16.02.2006
Ort: Sundern
Alter: 29
Geschlecht: Männlich
Verfasst Mi 22.11.2006 22:45
Titel

Antworten mit Zitat Zum Seitenanfang

das sieht ja schonmal super aus...

kennst du irgendwo im netzt ne page wo das gut erklärt ist mit dem LEFT JOIN ? kann zwar aus deinem Code-Schnipel was herausfinden aber würde gern wissen wie das funktioniert bzw die logik dahinter?
finde nämlich nix gescheites im netzt Lächel

ps. deine page mit dem Kompendium ist ne klasse idee *zwinker*
  View user's profile Private Nachricht senden
new001
Threadersteller

Dabei seit: 16.02.2006
Ort: Sundern
Alter: 29
Geschlecht: Männlich
Verfasst Mi 22.11.2006 22:55
Titel

Antworten mit Zitat Zum Seitenanfang

wie gebe ich denn dann meine einträge aus ?

vorher habe ich ja immer

Code:

$sql = mysql_query("SELECT ...");
while($row = mysql_fetch_array($sql))
    {
        echo $row['test'];
    };


gemacht... aber jetzt hab ich ja in deiner SELECT anweisung ja nicht mehr sone struktur wie ich vorher hatte... wie gebe ich denn zb den kursnamen aus ?
  View user's profile Private Nachricht senden
Juggalo4u

Dabei seit: 22.11.2006
Ort: Plauen
Alter: -
Geschlecht: Männlich
Verfasst Mi 22.11.2006 23:17
Titel

Antworten mit Zitat Zum Seitenanfang

new001 hat geschrieben:
wie gebe ich denn dann meine einträge aus ?

vorher habe ich ja immer

Code:

$sql = mysql_query("SELECT ...");
while($row = mysql_fetch_array($sql))
    {
        echo $row['test'];
    };


gemacht... aber jetzt hab ich ja in deiner SELECT anweisung ja nicht mehr sone struktur wie ich vorher hatte... wie gebe ich denn zb den kursnamen aus ?


Das machst du genau so auch.
Das left join ermöglicht sozusagen das während der select-Abfrage anhand der "Ziffern" sich die zugehörigen Namen, Tage etc. geholt werden. In dem Array stehen dann auch diese zur Ausgabe zur Verfügung.
Da es sich ja anscheinend um nen Tagesplan handelt wäre wohl noch eine Uhrzeit sinnvoll um dann die Selcetabfrage
danach zu sortieren. Also "Order by time" zum Beispiel noch anhängen.
  View user's profile Private Nachricht senden
new001
Threadersteller

Dabei seit: 16.02.2006
Ort: Sundern
Alter: 29
Geschlecht: Männlich
Verfasst Mi 22.11.2006 23:22
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
$sql = mysql_query("select kurseintrag.id, kurse.name as kursname, trainer.name as trainername, raum.name as raumname, tage.name as tagname from kurseintrag
      left join kurse on kurseintrag.eintragkurs = kurse.kid
      left join trainer on kurseintrag.eintragtrainer = trainer.tid
      left join raum on kurseintrag.eintragraum = raum.rid
      left join tage on kurseintrag.eintragtag = tage.did
      WHERE kurseintrag.eintragtag = 1)");
while($row=mysql_fetch_array($sql))
   {
      echo $row['trainer.name'];
   }



so ungefair oder mach ich da jetzt n feher ?

er soll ja an der stelle dann den namen des trainer posten der zu der nummer des trainers passt.
hab ich das also richtig verstanden ? Lächel
  View user's profile Private Nachricht senden
 
Ähnliche Themen [MySQL] nm/nn/mn Beziehung Tutorials
Punkte verbinden
PS kann Pfade nicht verbinden
klassen verbinden
Zähler verbinden mit Button
Webspace und Domain verbinden?
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.