Zwei Tabellen in einer Abfrage
Moin.
Ich habe ein problem.
Es gibt eine Datenbank mit 2 Tabellen.
Einmal Hauptartikel, einmal passende Nebenartikel
Wenn ich nun in einem Dropdownfeld die Nebenartikel anzeigen lassen will, hapert es bei mir, wie ich gleichzeitig die Hauptartikel dazu anzeigen lassen kann.
Das ist meine Aktuelle Abfrage die mir die Titel der Nebenartikel liefert.
Wie muss ich die Abfrage ändern um aus der Tabelle "tabelle_1" den "Titel" der zur jeweiligen "mainID" der "supID" liefert und dort einfügt so das dort folgendes funktioniert:
echo "<option value='$row->supID'>Titel des Haupartikels - $row->Titel</option>";
Jan
Ich habe ein problem.
Es gibt eine Datenbank mit 2 Tabellen.
Einmal Hauptartikel, einmal passende Nebenartikel
Wenn ich nun in einem Dropdownfeld die Nebenartikel anzeigen lassen will, hapert es bei mir, wie ich gleichzeitig die Hauptartikel dazu anzeigen lassen kann.
|
|
PHP-Quelltext |
1 2 3 4 5 6 |
$abfrage = "SELECT * FROM tabelle_5 ORDER BY mainID DESC";
$result=mysql_query($abfrage);
while($row = mysql_fetch_object($result))
{
echo "<option value='$row->supID'>$row->Titel</option>";
}
|
Das ist meine Aktuelle Abfrage die mir die Titel der Nebenartikel liefert.
Wie muss ich die Abfrage ändern um aus der Tabelle "tabelle_1" den "Titel" der zur jeweiligen "mainID" der "supID" liefert und dort einfügt so das dort folgendes funktioniert:
echo "<option value='$row->supID'>Titel des Haupartikels - $row->Titel</option>";
Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
Die einfachste aber nicht ganz sauberste Lösung ist einfach eine 2 Datenbankabfrage:
Bin grad ein wenig in Eile deswegen nicht ganz sicher ob du das meintest, sonst solltest du dir mal relatione Datenbanken angucken, vielleicht ist das ganze im Endeffekt eine bessere Lösung!
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$abfrage = "SELECT * FROM tabelle_5 ORDER BY mainID DESC";
$result=mysql_query($abfrage);
while($row = mysql_fetch_object($result))
{
echo "<option value='$row->supID'>$row->Titel</option>";
$abfrage2 = "SELECT * FROM tabelle_4 WHERE 'mainID' (...)";
$result2=mysql_query($abfrage);
while($row2 = mysql_fetch_object($result))
{
//hier deine abfrage
}
}
|
Bin grad ein wenig in Eile deswegen nicht ganz sicher ob du das meintest, sonst solltest du dir mal relatione Datenbanken angucken, vielleicht ist das ganze im Endeffekt eine bessere Lösung!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »author.psi« (8. Januar 2008, 14:54)
du kannst in einer abfrage 2 tabellen verwenden indem du einfach beide in das select statement schreibst. dann bildet mysql das kreuzprodukt der datensätze der beiden tabellen.
jetzt nimmst du halt noch alle datensätze wo die mainID in beiden gleich ist.
so ähnlich könnte dein statement ausschauen.
jperl
jetzt nimmst du halt noch alle datensätze wo die mainID in beiden gleich ist.
so ähnlich könnte dein statement ausschauen.
|
|
Quellcode |
1 |
SELECT t1.mainID, t5.Titel, t5.supID FROM tabelle_1 as t1, tabelle_5 as t5 WHERE t1.mainID = t5.mainID |
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
einen join zu formulieren wäre vermutlich noch bequemer:
|
|
Quellcode |
1 |
SELECT tabelle_5.*, tabelle_4.* FROM tabelle5 LEFT JOIN tabelle4 ON tabelle5.mainID = tabelle4.mainID ORDER BY tabelle5.mainID DESC |
~!__/
..o.o
This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
Erstmal danke an alle.
Mit den mehreren Datenbankanfragen habe ich ein paar probleme.
Das Statement verstehe ich leider nicht so wirklich.
Der join von Skittles gefällt mir am besten, leider passiert gar nichts wenn ich den code verwende.
Jan
Mit den mehreren Datenbankanfragen habe ich ein paar probleme.
Das Statement verstehe ich leider nicht so wirklich.

Der join von Skittles gefällt mir am besten, leider passiert gar nichts wenn ich den code verwende.

Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
also an sich ist das gar nicht so schwer wie es ausschaut:
Wenn das nicht helfen sollte, code und db-struktur rausrücken
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 |
SELECT tabelle.spalte, tabelle2.spalte FROM tabelle LEFT JOIN tabelle2 ON tabelle.spalte = tabelle2.spalte (hier eignen sich die gleichen Ids zB) WHERE .... |
Wenn das nicht helfen sollte, code und db-struktur rausrücken
~!__/
..o.o
This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Skittles« (8. Januar 2008, 21:42)
Ich bin immer ein wenig schwer von begriff wenn ich es nicht auf meinen eigenen code umsetzen kann.
Der ist aber kein geheimnis.
Die Datenbank hat 2 Tabellen (bzw. mehrere, es geht aber nur um 2 davon)
"rpgsammlung_1" => Enthält die Hauptdaten, unter anderem eine "ID" sowie ein "Titel"
"rpgsammlung_5" => Enthält die Zusatzbücher (Supplements oder in meinem code sup abgekürzt), unter anderem die "supID" = die Id des Zusatzbuches, die "mainID" welche der "ID" der rpgsammlung_1 entspricht (dadurch kann ich mehrere suplements dem gleichen artikel zuweisen), sowie den "supTitel" also den Titel des Zusatzbuches.
Das kann also wie folgt aussehen:
rpgsammlung_1
ID = "114"
Titel = "Star Wars"
rpgsammlung_5
supID = "3"
mainID = "114"
supTitel = "Die Yedi"
Ich möchte ein Select Feld machen, das mir erlaubt die "supID" weiter an eine andere PHP Datei weiter zu geben.
Ausgegeben würde das dann aussehen wie:
Star Wars - Die Yedi
Umsetzen würde ich das, da ich mit dem "while Row"- Prinzip sehr gut klar komme, wie oben angegeben mit:
"echo "<option value='$row->supID'>$row->Title - $row->supTitel</option>";"
Es sollten halt alle Titel aus rpgsammlung_1 ausgegeben werden die ein Supplement haben, und dann dahinter den supTitel des Supplements, damit ich sie beim bearbeiten auseinander halten kann.
z.b.
Star Wars - Die Yedi
Star Wars - Die dunklen Yedi
World of Warcraft - Die Rassen
etc.
Nun hoffe ich auf deine Hilfe um an die Daten zu kommen, notfalls auch ohne "While Row".
Jan
Der ist aber kein geheimnis.

|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<form method="post" action="supdelete1.php">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif">Supplement:
<b>
<select name="supID">
<?
include ("../config.php");
include ("../connect.php");
$abfrage = "SELECT rpgsammlung_5.*, rpgsammlung_1.* FROM rpgsammlung_5 LEFT JOIN rpgsammlung_1 ON rpgsammlung_5.mainID = rpgsammlung_1.mainID ORDER BY rpgsammlung_5.mainID DESC";
$result=mysql_query($abfrage);
while($row = mysql_fetch_object($result))
{
echo "<option value='$row->supID'>$row->Title - $row->supTitel</option>";
}
?>
</select>
<input type="submit" name="Submit" value="Löschen">
</b></font>
</div>
</form>
|
Die Datenbank hat 2 Tabellen (bzw. mehrere, es geht aber nur um 2 davon)
"rpgsammlung_1" => Enthält die Hauptdaten, unter anderem eine "ID" sowie ein "Titel"
"rpgsammlung_5" => Enthält die Zusatzbücher (Supplements oder in meinem code sup abgekürzt), unter anderem die "supID" = die Id des Zusatzbuches, die "mainID" welche der "ID" der rpgsammlung_1 entspricht (dadurch kann ich mehrere suplements dem gleichen artikel zuweisen), sowie den "supTitel" also den Titel des Zusatzbuches.
Das kann also wie folgt aussehen:
rpgsammlung_1
ID = "114"
Titel = "Star Wars"
rpgsammlung_5
supID = "3"
mainID = "114"
supTitel = "Die Yedi"
Ich möchte ein Select Feld machen, das mir erlaubt die "supID" weiter an eine andere PHP Datei weiter zu geben.
Ausgegeben würde das dann aussehen wie:
Star Wars - Die Yedi
Umsetzen würde ich das, da ich mit dem "while Row"- Prinzip sehr gut klar komme, wie oben angegeben mit:
"echo "<option value='$row->supID'>$row->Title - $row->supTitel</option>";"
Es sollten halt alle Titel aus rpgsammlung_1 ausgegeben werden die ein Supplement haben, und dann dahinter den supTitel des Supplements, damit ich sie beim bearbeiten auseinander halten kann.
z.b.
Star Wars - Die Yedi
Star Wars - Die dunklen Yedi
World of Warcraft - Die Rassen
etc.
Nun hoffe ich auf deine Hilfe um an die Daten zu kommen, notfalls auch ohne "While Row".
Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Jan Schattling« (8. Januar 2008, 22:18)
|
|
Quellcode |
1 |
SELECT rpgsammlung_1.Title, rgpsammlung_5.supID, rgpsammlung_5.supTitel FROM rpgsammlung_1 LEFT JOIN rpgsammlung_5 ON rpgsammlung_1.ID = rpgsammlung_5.mainID ORDER BY rpgsammlung_5.mainID DESC |
schau nochmal drüber, ob die Namen alle korrekt sind, sollte so gehen.
Ich probiere nochmal das Prinzip zu erklären: Du machst mehr oder weniger ne normale Select-Abfrage (nur mit den Tabellennamen) und sagst MySQL nur zusätzlich: "Hole mir die supID und supTitel, indem du in der anderen Tabelle nachsiehst, aber gilt ID == mainID".
while/row kannst du beibehalten.
~!__/
..o.o
This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Skittles« (8. Januar 2008, 22:37)
mmmh... er gibt mir nen Fehler aus.
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web25/html/rpgsammlung/admin/supdelete.php on line 45
Abgesehen von einem Buchstabendreher waren aber die Namen korrekt.
Jan
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web25/html/rpgsammlung/admin/supdelete.php on line 45
Abgesehen von einem Buchstabendreher waren aber die Namen korrekt.
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 |
39 <?
40 include ("../config.php");
41 include ("../connect.php");
42
43 $abfrage = "SELECT rpgsammlung_1.Titel, rgpsammlung_5.supID, rgpsammlung_5.supTitel FROM rpgsammlung_1 LEFT JOIN rpgsammlung_5 ON rpgsammlung_1.ID = rpgsammlung_5.mainID ORDER BY rpgsammlung_5.mainID DESC";
44 $result=mysql_query($abfrage);
45 while($row = mysql_fetch_object($result))
46 {
47 echo "<option value='$row->supID'>$row->Titel - $row->supTitel</option>";
48 }
49
50 ?>
|
Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
ui... hatte noch einen Buchstabendreher.
Braver Mysql_Error. 
Und danke für die Hilfe.
Eine kleine sache stört mich noch ein wenig.
Es werden alle Titel angezeigt die in der ersten tabelle sind, nicht nur die, die ein zugewiesenes Supplement haben.
Kann man das irgendwie noch ändern?
Jan
Braver Mysql_Error. 
Und danke für die Hilfe.
Eine kleine sache stört mich noch ein wenig.
Es werden alle Titel angezeigt die in der ersten tabelle sind, nicht nur die, die ein zugewiesenes Supplement haben.
Kann man das irgendwie noch ändern?
Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
Yay... genau das war es was ich gebraucht habe.
Vielen Dank für deine Hilfe.
Jan
Edit: Das mit RIGHT hat auch gereicht.
Vielen Dank für deine Hilfe.

Jan
Edit: Das mit RIGHT hat auch gereicht.
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jan Schattling« (9. Januar 2008, 20:32)


