Autor |
Nachricht |
new001
Threadersteller
Dabei seit: 16.02.2006
Ort: Sundern
Alter: 37
Geschlecht:
|
Verfasst Mi 22.11.2006 19:31
Titel Beziehung zwischen DB tabellen verbinden. |
|
|
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>";
};
};
};
};
};
?> |
|
|
|
|
|
dr13.de
Dabei seit: 21.11.2005
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 22.11.2006 23:02
Titel
|
|
|
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.
|
|
|
|
|
Anzeige
|
|
|
new001
Threadersteller
Dabei seit: 16.02.2006
Ort: Sundern
Alter: 37
Geschlecht:
|
Verfasst Mi 22.11.2006 23:26
Titel
|
|
|
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
thx.
|
|
|
|
|
dr13.de
Dabei seit: 21.11.2005
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 22.11.2006 23:40
Titel
|
|
|
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
|
|
|
|
|
|
new001
Threadersteller
Dabei seit: 16.02.2006
Ort: Sundern
Alter: 37
Geschlecht:
|
Verfasst Mi 22.11.2006 23:45
Titel
|
|
|
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
ps. deine page mit dem Kompendium ist ne klasse idee
|
|
|
|
|
new001
Threadersteller
Dabei seit: 16.02.2006
Ort: Sundern
Alter: 37
Geschlecht:
|
Verfasst Mi 22.11.2006 23:55
Titel
|
|
|
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 ?
|
|
|
|
|
Juggalo4u
Dabei seit: 22.11.2006
Ort: Plauen
Alter: -
Geschlecht:
|
Verfasst Do 23.11.2006 00:17
Titel
|
|
|
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.
|
|
|
|
|
new001
Threadersteller
Dabei seit: 16.02.2006
Ort: Sundern
Alter: 37
Geschlecht:
|
Verfasst Do 23.11.2006 00:22
Titel
|
|
|
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 ?
|
|
|
|
|
|
|
|
Ähnliche Themen |
Tabellen-Spalten Verbinden – InDesign CC
[MySQL] nm/nn/mn Beziehung Tutorials
.swf mit .swf verbinden ?
[AS3] - BitmapData verbinden
klassen verbinden
Punkte verbinden
|
|