Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

1 Zum Seitenanfang

Dienstag, 8. Januar 2008, 14:12

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.

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
 

author.psi

Haudegen

Dabei seit: 29.11.2004

Beiträge: 699

 

2 Zum Seitenanfang

Dienstag, 8. Januar 2008, 14:52

Die einfachste aber nicht ganz sauberste Lösung ist einfach eine 2 Datenbankabfrage:


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)

 

jperl

Super Moderator

Dabei seit: 09.04.2003

Beiträge: 3 453

 

3 Zum Seitenanfang

Dienstag, 8. Januar 2008, 16:16

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.

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.
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

4 Zum Seitenanfang

Dienstag, 8. Januar 2008, 16:52

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.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

5 Zum Seitenanfang

Dienstag, 8. Januar 2008, 21:15

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
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

6 Zum Seitenanfang

Dienstag, 8. Januar 2008, 21:42

also an sich ist das gar nicht so schwer wie es ausschaut:

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)

 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

7 Zum Seitenanfang

Dienstag, 8. Januar 2008, 22:14

Ich bin immer ein wenig schwer von begriff wenn ich es nicht auf meinen eigenen code umsetzen kann.
Der ist aber kein geheimnis. :D

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:&nbsp;
      <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>
&nbsp;
<input type="submit" name="Submit" value="L&ouml;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)

 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

8 Zum Seitenanfang

Dienstag, 8. Januar 2008, 22:36

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)

 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

9 Zum Seitenanfang

Dienstag, 8. Januar 2008, 23:05

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.

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
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

10 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 14:30

PHP-Quelltext

1
$result=mysql_query($abfrage);


ersetzen durch

PHP-Quelltext

1
$result=mysql_query($abfrage) or die(mysql_error());


was gibt das aus?

~!__/
..o.o

This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

11 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 18:21

ui... hatte noch einen Buchstabendreher.^^ Braver Mysql_Error. :D
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
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

12 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 19:17

füge noch folgendes vor ORDER BY ein:

Quellcode

1
WHERE tab2.id IS NOT NULL

~!__/
..o.o

This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Skittles« (9. Januar 2008, 19:34)

 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

13 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 20:30

Yay... genau das war es was ich gebraucht habe.
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)

 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

14 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 21:07

das würde halt verhindern, falls mal ein sup ohne haupt verkommen sollte und du weißt schon ^^

~!__/
..o.o

This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 593

 

15 Zum Seitenanfang

Mittwoch, 9. Januar 2008, 22:13

Ah... kay... ja das ist sinnvoll.


Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan