• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zwei Tabellen verbinden die Variabele aus url enthalten.

Hallo zusammen,

ich möchte gern zwei Tabellen nutzen um Informationen auszugeben.
Der Wert kommt über url.

Ich hatte zu erst die Zeile
PHP:
$ergebnis = mysql_query("SELECT Storynummer, Ort, Beschreibung, Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st USING (SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "'")) OR die("Error: $abfrage <br>".mysql_error());

doch das klappte scheinbar eben so wenig wie das folgende.

PHP:
$ergebnis = mysql_query("SELECT Storynummer, Ort, Beschreibung, Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st WHERE SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "'") OR die("Error: $abfrage <br>".mysql_error());

Meine Schwierigkeit ist also im Moment.
Wie füge ich in die Abfrage
PHP:
='" . mysql_real_escape_string($_GET['SerienID']) . "'")
ein um zu sagen das Datensäte aus beiden Tabellen mit der über url gesendeten Variable SerienID ausgegeben werden sollen.
 
Werbung:
Korrekt wäre es mit ON:
PHP:
$ergebnis = mysql_query("SELECT Storynummer, Ort, Beschreibung, Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "'") OR die("Error: $abfrage <br>".mysql_error());

Siehe MySQL-Manual:
MySQL :: MySQL 5.0 Reference Manual :: 13.2.8.2 JOIN Syntax

Tipp:
Wenn Du nicht sicher bist, ob und wie ein Statement korrekt formuliert wäre, dann führe es zuerst im phpmyadmin aus. Dort werden dir auch größtenteils die selben Fehlermeldungen wie bei mysql_error() angezeigt nach denen man leicht googeln kann um Erklärungen zu finden ;)

EDITH sagt:
Beim näheren Betrachten deines Statements fällt mir noch eine gewisse Unlogik auf. Du willst eine zweite Tabelle einbinden, definierst aber keine Verbindung zwischen den beiden Tabellen? Theoretisch müsste das Statement doch in etwa so aussehen:
PHP:
$ergebnis = mysql_query("SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON  st.SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "' AND st.SerienID = s.SerienID") OR  die("Error: $abfrage <br>".mysql_error());
bzw. über irgendeine andere gemeinsame Spalte.
 
Dies scheint nicht zu gehen.
Denn nun wirft die Datenbank alle Einträge von story_location aus, egal welche SerienID gesendet wird.



Ich möchte folgendes.

Tabelle story_location (Storynummer, Ort, Beschreibung, Kleidung,
) und
storyserien (Serienname)
nur dann verbinden wenn in beiden die gleiche SerienID verwendet wird und diese gleichzeitig mit der in der url gesendet übereinstimmt.

Zu deinem Tipp: wegen dem wert in der url ging der test in phpmyadmin nicht.
 
Werbung:
Tabelle story_location (Storynummer, Ort, Beschreibung, Kleidung,
) und
storyserien (Serienname)
nur dann verbinden wenn in beiden die gleiche SerienID verwendet wird und diese gleichzeitig mit der in der url gesendet übereinstimmt.

Das hatte ich in meinem letzten Beispiel eigentlich geschrieben. Das sollte klappen?!

Zu deinem Tipp: wegen dem wert in der url ging der test in phpmyadmin nicht.

Setze zum Testen anstelle der Variable einen Wert ein.
 
Das hatte ich in meinem letzten Beispiel eigentlich geschrieben. Das sollte klappen?!



Setze zum Testen anstelle der Variable einen Wert ein.

so sieht es für mich eigentlich auch aus.
Und ich habe es nun in phpmyadmin mit 2 als ID getestet
Und bekomme auch werte von z.b 5,7 oder NULL raus.

Ich erhalte im Moment das selbe Ergebnis als wenn ich
PHP:
SELECT s.serienid, Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON   st.SerienID = s.SerienID
schreiben würde.
Der Wert aus url wird scheinbar ignoriert.
 
Zuletzt bearbeitet:
Werbung:
Ignoriert wird der sicher nicht, wenn er denn vorhanden ist. Prüfe das mal mit

PHP:
var_dump($_GET['SerienID']);

und lass dir auch mal das abgeschickte Statement in der PHP-Programmierung anzeigen:

PHP:
$sql = "SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON  st.SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "' AND st.SerienID = s.SerienID";
var_dump($sql);
$ergebnis = mysql_query($sql) OR  die("Error: $abfrage <br>".mysql_error());
 
Ich habe mal die Antworten als Zitat eingefügt

Ignoriert wird der sicher nicht, wenn er denn vorhanden ist. Prüfe das mal mit

PHP:
var_dump($_GET['SerienID']);



und lass dir auch mal das abgeschickte Statement in der PHP-Programmierung anzeigen:

PHP:
$sql = "SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON  st.SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "' AND st.SerienID = s.SerienID";
var_dump($sql);
$ergebnis = mysql_query($sql) OR  die("Error: $abfrage <br>".mysql_error());

string(157) "SELECT Storynummer, Ort, Beschreibung, Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON st.SerienID ='2' AND st.SerienID = s.SerienID" string(1) "2

Es dürfte bei SerienID 2 nur 8 Einträge geben.
 
Werbung:
Ok, und das sagt mir jetzt was wo Du doch mit SerienID 1 testest? Woran siehst Du wieviele Ergebnisse es gibt?

Allerdings: beim var_dump() vom SQL-Statement erkennt man, dass die SerienID dort korrekt eingefügt wird. Es liegt also kein Syntaxproblem vor.
 
ich habe zu erst 1 dann 2 getestet weil ich das Ergebnis in der Abfrage bei phpmyadmin einfacher überblicken kann.
Ich habe in story_location nur 8 einträge mit SerienID=2.

Die Zitate habe ich anschließend auf das Ergebnis von 2 geändert.
SerienID=1 wären 17
 
Zuletzt bearbeitet:
Ich habe mir bei Tests in phpmyadmin auch die beiden SerienID anzeigen lassen.
Und dann habe ich mir gedacht ich schreibe in die Abfrage auch SerienID IS NOT NULL rein.
Doch das Ergebnis ist das gleiche.
Es werden immer noch andere SerienID als gesendet eingeblendet und auch mit NULL

In der Anlage eine hoffentlich gut zu lesender ScreenshotAusschitt 3.jpg denn leider musste ich sehr verkleinern damit ich hochladen konnte
 
Werbung:
So nachdem der (MS Photo Manager im gegensatz zum alten Photo Editor) nur Ärger bereitet, habe ich die Bilder mal mit dem guten alten Paint geschnitten.

Hier das Ergebis in phpmyadmin mit
Code:
st.SerienID = s.SerienID
-> Ergebnis (97 Datensätze)
Ergebis ID2 mit ID=ID.jpg
(zur Verdeutlichung habe ich beide SerienID mit eingeblendet)

und hier ohne
Anhang anzeigen Ergebnis nur SerienID2.jpg


In beiden Fällen mit SerienID = 2 -> Ergebnis (8 Datensätze)
 

Anhänge

  • Ergebnis nur SerienID2.jpg
    Ergebnis nur SerienID2.jpg
    47,9 KB · Aufrufe: 3
  • Ergebnis nur SerienID2.jpg
    32 KB · Aufrufe: 0
  • Ergebis ID2 mit ID=ID.jpg
    Ergebis ID2 mit ID=ID.jpg
    9,7 KB · Aufrufe: 4
Zuletzt bearbeitet:
Woran könnte es liegen das
PHP:
SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON  st.SerienID =2 AND s.SerienID = st.SerienID

und
PHP:
SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s LEFT JOIN storyserien st ON  s.SerienID = st.SerienID

das selbe Ergebnis haben?
 
Teillösung

Hi,

nachdem ich lange gerätselt habe warum immer viel zuviele Daten ausgegeben werden. Und das ganze einer Kreuzabfrage (so nennt man das wohl) glich. Habe ich es mal mit Right Join probiert... das war dann schon weniger.
Richtig war dann Inner Join.

PHP:
SELECT Storynummer, Ort, Beschreibung,  Kleidung, Serienname FROM story_location s INNER JOIN storyserien st ON st.SerienID ='" . mysql_real_escape_string($_GET['SerienID']) . "' AND s.SerienID = st.SerienID

Doch nun bin ich darauf gekommen das ich auch die Haupttabelle für zwei Daten brauche.
Ich meine mich zu erinnern das man aber nur 2 Tabellen mit Join verbinden konnte. Oder täusche ich mich?
Wie war das doch gleich wenn man 3 Tabellen verbinden will?
SerienID ist weiterhin das verbindende Element.
 
Werbung:
Zurück
Oben