Zur Navigation

MySQL-Abfrage über zwei Tabellen

1 Tilman

Hallo Jörg!

Ich habe mir gedacht, dass ich anstatt mit diesem Code für jeden Autoren eine Datei zu machen:
<? include ($spalte1); ?>
lieber eine neue Tabelle in der Datenbank anlege.

Es gibt die zwei Spalten autor und inhalt.
In der 1. Tabelle gibt es auch das Feld autor.
Mit diesem Code soll der Autor aus der 1. Tabelle (die mit den Bücherdaten) ind der 2. Tabelle(Autorenliste) gesucht werden, und dann der Inhalt angezeigt werden:

<?
$aut = mysql_query("SELECT inhalt FROM autorenliste WHERE $autor = " . $autor);
list($inhalt) = mysql_fetch_row($aut);
?>

Kommt aber ne Fehlermeldung:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in E:\TIL\xampp\htdocs\buecher\allbooks.php on line 82

In der steht:
list($inhalt) = mysql_fetch_row($aut);

28.07.2008 15:10

2 Jörg Kruse

Wenn du eine Abfrage über zwei Tabellen machen möchtest, benötigst du hierzu wahrscheinlich eine JOIN Query. Was für Datenfelder (Spalten) haben denn die beiden Tabellen?

Edit:
Es gibt die zwei Spalten autor und inhalt.

In der 1. Tabelle gibt es auch das Feld autor.

Du benötigst aber auch noch Datenfelder mit IDs über die die Tabellen verknüpft werden. Oder dient "autor" gleichzeitig als Schlüssel?

28.07.2008 17:32 | geändert: 28.07.2008 17:35

3 Tilman

Ich habe manchmal z.B. drei Bücher eines Autors. Ich könnte jetzt in der 1. Tabelle noch die Spalte "Autorentext" hinzufügen, wen ich den Text aber mal ändern wollen würde, so müsste ich 3 Mal den Inhalt ändern. Um dies zu vermeiden, habe ich zwei Tabellen gemacht.
Du benötigst aber auch noch Datenfelder mit IDs über die die Tabellen verknüpft werden. Oder dient "autor" gleichzeitig als Schlüssel

Ja. Denn in der Adresszeile wird ein ID angegeben, z.B. 1. Es werden die Daten zu dem ID abgerufen (aus Bücherdaten-Tabelle), auch "autor". Nun will ich, dass der Name des Autors ("autor") in der 2. Tabelle (Autorenliste) gesucht wird. Daraufhin soll der dazugehörige Text des Autors auf der Webseite angezeigt werden. (etwas kompliziert, hoffe du hast es verstanden!)

Was für Datenfelder (Spalten) haben denn die beiden Tabellen?

Tabelle Bücherdaten: title, autor, buchtext, seiten, medium, verlag, isbn, preis

Tabelle Autorenliste: autor, inhalt

29.07.2008 12:05

4 Jörg Kruse

Ja. Denn in der Adresszeile wird ein ID angegeben, z.B. 1. Es werden die Daten zu dem ID abgerufen (aus Bücherdaten-Tabelle), auch "autor".

Dann fehlen hier aber noch die Spalten mit den IDs:

Tabelle Bücherdaten: title, autor, buchtext, seiten, medium, verlag, isbn, preis

Tabelle Autorenliste: autor, inhalt

Darüber werden schließlich die beiden Tabellen verküpft. Angenommen für die Bücher gibt es die ID bid und für die Autoren die ID aid, dann könnten die Tabellen so ausschauen:

Tabelle Bücherdaten:
bid, aid, title, buchtext, seiten, medium, verlag, isbn, preis

Tabelle Autorenliste:
aid, autor, inhalt

Die Spalte "autor" kannst du dir in der Bücherdatentabelle dann sparen - stattdessen fungiert dort die ID "aid" aus der anderen Tabelle als Fremdschlüssel.

Bei einer JOIN-Abfrage verknüpfst du dann die zwei Tabellen über diese ID

Eine Abfrage, die Autorennamen und Autorenbeschreibung zum Buch Nr. 7 sucht, könnte dann so ausschauen:

SELECT autorenliste.autor, autorenliste.inhalt FROM autorenliste LEFT JOIN buecherdaten ON autorenliste.aid = buecherdaten.aid WHERE buecherdaten.bid = 7;

29.07.2008 12:55 | geändert: 29.07.2008 12:58

5 Tilman

Hallo Jörg!

Es erscheint eine Fehlermeldung:
Parse error: syntax error, unexpected T_STRING in E:\TIL\xampp\htdocs\buecher\allbooks.php on line 81

In Zeile 81 steht der Code:
SELECT autorenliste.autor, autorenliste.inhalt FROM autorenliste LEFT JOIN buecherdaten ON autorenliste.aid = buecherdaten.aid WHERE buecherdaten.bid = 7;

29.07.2008 13:15

6 Jörg Kruse

Hast du den Code direkt eingefügt? Das ist ja nur die SQL-Abfrage - die du mit der entsprechenden PHP-Funktion aufrufen musst, z.B.:

$result = mysql_query("SELECT autorenliste.autor, autorenliste.inhalt FROM autorenliste LEFT JOIN buecherdaten ON autorenliste.aid = buecherdaten.aid WHERE buecherdaten.bid = 7;");

29.07.2008 13:20

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]