2 Tabellen miteinander verbinden, aber wie nur?

05/14/2016 20:22 Play4free1#1
Hallo,

ich habe eine Tabelle Videospiel, wobei ich die Daten V_ID, Plattform, Titel und Fsk anzeigen lasse
Ausschnitt asu dem Dokument:

$sql = "SELECT V_ID, Titel, Plattform, FSK FROM videospiel";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<br> V_ID: ". $row["V_ID"]. " - Name: ". $row["Titel"]. " " . $row["Plattform"] . " " .$row["FSK"] . "<br>";
}
} else {
echo "0 Ergebnisse";
}

Jetzt möchte ich auch aus der Tabelle "Publisher" "Name" anzeigen lassen, wobei P_ID Primärschlüssel ist. Da es für spiele mehrere Publisher gibt, haben wir noch eine Tabelle und zwar die Tabelle "published" mit "P_ID" aus der Tabelle "Publisher"
und V_ID aus "videospiel". Wie kann ich jetzt den Publisher genau für das Spiel anzeigen lassen? Danke für eure Mühe! Mit dem Befehl joins sollte es eigentlich klappen aber weiß nicht wie ich das im PHP Dokument machen soll (Syntax und so).
05/14/2016 20:29 False#2
Quote:
Originally Posted by Play4free1 View Post
Hallo,

ich habe eine Tabelle Videospiel, wobei ich die Daten V_ID, Plattform, Titel und Fsk anzeigen lasse
Ausschnitt asu dem Dokument:

$sql = "SELECT V_ID, Titel, Plattform, FSK FROM videospiel";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<br> V_ID: ". $row["V_ID"]. " - Name: ". $row["Titel"]. " " . $row["Plattform"] . " " .$row["FSK"] . "<br>";
}
} else {
echo "0 Ergebnisse";
}

Jetzt möchte ich auch aus der Tabelle "Publisher" "Name" anzeigen lassen, wobei P_ID Primärschlüssel ist. Da es für spiele mehrere Publisher gibt, haben wir noch eine Tabelle und zwar die Tabelle "published" mit "P_ID" aus der Tabelle "Publisher"
und V_ID aus "videospiel". Wie kann ich jetzt den Publisher genau für das Spiel anzeigen lassen? Danke für eure Mühe! Mit dem Befehl joins sollte es eigentlich klappen aber weiß nicht wie ich das im PHP Dokument machen soll (Syntax und so).

PHP Code:
SELECT
   P_ID
   V_ID
,
   
Titel,
   
Plattform,
   
FSK
FROM
   videospiel
JOIN publisher
   ON publisher
.id videospiel.P_ID 
Also einfach in der Videospiel Tabelle die P_Id Spalte hinzufügen welche dann auf die Id des Publishers zeigt.


$row["SPALTENNAME"]
05/14/2016 20:45 Play4free1#3
danke! Ein einpaar Fragen noch:
1. Der Primärschlüssel ist doch Name, also einfach Name anstatt P_ID oder? P_ID haben wir doch weggelassen.
2. Bei $row["SPALTENNAME"] muss da einfach Name rein? Denke schon oder?
3. muss erst nach dem Join-Befehl ein simikolon? SELECT
P_ID
V_ID,
Titel,
Plattform,
FSK
FROM
videospiel
JOIN publisher
ON publisher.id = videospiel.P_ID ;

Oder zweimal ein simikolon?:
SELECT
P_ID
V_ID,
Titel,
Plattform,
FSK
FROM
videospiel ;
JOIN publisher
ON publisher.id = videospiel.P_ID ;
05/14/2016 23:52 False#4
Quote:
Originally Posted by Play4free1 View Post
danke! Ein einpaar Fragen noch:
1. Der Primärschlüssel ist doch Name, also einfach Name anstatt P_ID oder? P_ID haben wir doch weggelassen.
2. Bei $row["SPALTENNAME"] muss da einfach Name rein? Denke schon oder?
3. muss erst nach dem Join-Befehl ein simikolon? SELECT
P_ID
V_ID,
Titel,
Plattform,
FSK
FROM
videospiel
JOIN publisher
ON publisher.id = videospiel.P_ID ;

Oder zweimal ein simikolon?:
SELECT
P_ID
V_ID,
Titel,
Plattform,
FSK
FROM
videospiel ;
JOIN publisher
ON publisher.id = videospiel.P_ID ;
1.In der Videospiel Tabelle wäre V_ID der Primär Schlüssel und in der Publisher Tabelle P_ID.
Reintherotisch bräuchtest du in diesem Fall nicht mal ein Primär Schlüssel.
Er ist dafür da das diese Spalte unique sein muss, z.b. damit bei einem user der Logn (email z.b.) nur einmal vorhanden sein DARF.
Anderes Beispiel wäre z.b. wenn du foreign keys nutzt brauchst du auch ein Primär Schlüssel.


2. Korrekt, wenn ich mich nicht irre können jedoch Probleme auftreten wenn beide Tabellen die Spalte Name haben.
Dann musst du es im Sql so machen :
PHP Code:
SELECT   videospiel.name AS gameName,   publisher.name AS pubName
FROM
   videospiel
JOIN publisher
   ON publisher
.id videospiel.P_ID 
Und dann natürlich $row["gameName"].


3.Zwei auf keinen Fall, wenn eins am Ende.. Wobei Semikolons irrelevant sind und komplett weggelassen werden können.
05/15/2016 01:53 Play4free1#5
Ich meine, dass P_ID gelöscht wurde da der NAme des Publisher als Primärschlüssel ebenso geeignet ist. Ich habe mein Code verändert.

$sql = "SELECT V_ID, Titel, Plattform, FSK FROM videospiel
JOIN Publisher
ON Publisher.Name = videospiel.V_ID" ;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<br> V_ID: ". $row["V_ID"]. " - Name: ". $row["Titel"]. " " . $row["Plattform"] . " " .$row["FSK"] . $row["Publisher.Name"] . "<br>";
}
} else {
echo "0 results";
}
Es kommt 0 Results raus also muss es da noch einen fehler geben.
Nochmal als Zusammenfassung.
1. Tabelle videospiel welche "Plattform", "V_ID", "Fsk" und "Titel" beinhaltet - V_ID ist Primärschlüssel
2. Tabelle Publisher welche "Name" und "Ort" beinhaltet aber nur "Name" soll angezeigt werden - "Name" ist Primärschlüssel
3. Tabelle published welche "V_ID" und "Name" beinhaltet interne Beziehung wurde eingestellt - keins von beiden ist in dieser Tabelle primärschlüssel

Quote:
Originally Posted by .ƒaℓsє. View Post
1.In der Videospiel Tabelle wäre V_ID der Primär Schlüssel und in der Publisher Tabelle P_ID.
Reintherotisch bräuchtest du in diesem Fall nicht mal ein Primär Schlüssel.
Er ist dafür da das diese Spalte unique sein muss, z.b. damit bei einem user der Logn (email z.b.) nur einmal vorhanden sein DARF.
Anderes Beispiel wäre z.b. wenn du foreign keys nutzt brauchst du auch ein Primär Schlüssel.


2. Korrekt, wenn ich mich nicht irre können jedoch Probleme auftreten wenn beide Tabellen die Spalte Name haben.
Dann musst du es im Sql so machen :
PHP Code:
SELECT   videospiel.name AS gameName,   publisher.name AS pubName
FROM
   videospiel
JOIN publisher
   ON publisher
.id videospiel.P_ID 
Und dann natürlich $row["gameName"].


3.Zwei auf keinen Fall, wenn eins am Ende.. Wobei Semikolons irrelevant sind und komplett weggelassen werden können.

Ich habe das Gefühl ich habe in der Tabelle published eine Fehler bei der Beziehung gemacht... Keine ahnung obs stimmt.
05/15/2016 02:06 False#6
Quote:
Originally Posted by Play4free1 View Post
Ich meine, dass P_ID gelöscht wurde da der NAme des Publisher als Primärschlüssel ebenso geeignet ist. Ich habe mein Code verändert.

$sql = "SELECT V_ID, Titel, Plattform, FSK FROM videospiel
JOIN Publisher
ON Publisher.Name = videospiel.V_ID" ;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<br> V_ID: ". $row["V_ID"]. " - Name: ". $row["Titel"]. " " . $row["Plattform"] . " " .$row["FSK"] . $row["Publisher.Name"] . "<br>";
}
} else {
echo "0 results";
}
Es kommt 0 Results raus also muss es da noch einen fehler geben.
Nochmal als Zusammenfassung.
1. Tabelle videospiel welche "Plattform", "V_ID", "Fsk" und "Titel" beinhaltet - V_ID ist Primärschlüssel
2. Tabelle Publisher welche "Name" und "Ort" beinhaltet aber nur "Name" soll angezeigt werden - "Name" ist Primärschlüssel
3. Tabelle published welche "V_ID" und "Name" beinhaltet interne Beziehung wurde eingestellt - keins von beiden ist in dieser Tabelle primärschlüssel




Ich habe das Gefühl ich habe in der Tabelle published eine Fehler bei der Beziehung gemacht... Keine ahnung obs stimmt.
Mach Screenshots oder gib uns mehr Infos sonst können wir nicht helfen :p
05/15/2016 02:07 Play4free1#7
kommt sofort :D
05/15/2016 02:13 Play4free1#8
So siehts aus

EDIT: Man erkennt leider nichts... Externe Dienste benötigt man aber kenne keine wirklich xD
05/15/2016 02:20 Play4free1#9
[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

1. Screenshot -> Beziehungsübersicht von der Tabelle published
2. Screenshot -> Tabellenstruktur published
3. Screenshot -> Tabelle videospiel
4. Screenshot -> Tabelle Publisher

Quote:
Originally Posted by .ƒaℓsє. View Post
Mach Screenshots oder gib uns mehr Infos sonst können wir nicht helfen :p
Hoffe alls wichtige ist drauf^^

[Only registered and activated users can see links. Click Here To Register...]

Code^^
05/15/2016 02:59 False#10
Quote:
Originally Posted by Play4free1 View Post
[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

1. Screenshot -> Beziehungsübersicht von der Tabelle published
2. Screenshot -> Tabellenstruktur published
3. Screenshot -> Tabelle videospiel
4. Screenshot -> Tabelle Publisher



Hoffe alls wichtige ist drauf^^

[Only registered and activated users can see links. Click Here To Register...]

Code^^
Das kann auch nicht funktionieren, du hast einerseits keine Id bei der publisher Tabelle und im Sql guckst du ob der Name vom spiel dem vom Entwickler übereinstimmt was ja sehr sehr selten der Fall ist :p

Im Anhang hast du mal eine kleine Datenbank(bzw das Sql was du importieren kannst) wie du es besser machen kannst.
Dort hast du auch eine View wo du z.b. einen passendes SQL findest.
05/15/2016 03:09 Play4free1#11
Oh, sie ist ja ganz anders :D. Muss mich umschauen ^^. Danke für deine Hilfe und Mühe!
Wie mache ich das jetzt mit dem JOIN-Befehl?

Quote:
Originally Posted by .ƒaℓsє. View Post
Das kann auch nicht funktionieren, du hast einerseits keine Id bei der publisher Tabelle und im Sql guckst du ob der Name vom spiel dem vom Entwickler übereinstimmt was ja sehr sehr selten der Fall ist :p

Im Anhang hast du mal eine kleine Datenbank(bzw das Sql was du importieren kannst) wie du es besser machen kannst.
Dort hast du auch eine View wo du z.b. einen passendes SQL findest.
Könntest du für einen Datensatz mein PHP-Code so ergänzen, dass das klappt?
Wäre echt nett von dir :D!
05/15/2016 03:31 False#12
Quote:
Originally Posted by Play4free1 View Post
Oh, sie ist ja ganz anders :D. Muss mich umschauen ^^. Danke für deine Hilfe und Mühe!
Wie mache ich das jetzt mit dem JOIN-Befehl?



Könntest du für einen Datensatz mein PHP-Code so ergänzen, dass das klappt?
Wäre echt nett von dir :D!
Alles vorkauen will ich nicht, da auch ein Lerneffekt da sein soll.
Habe dir sogar eine Datenbank(SQL) geschrieben :p

Probier erst einmal selber ein wenig und wenn du echt nicht weiter kommst beschreibe dein Problem genauer, was du probiert hast und wo du nicht weiter kommst und wieso.
05/15/2016 03:42 Play4free1#13
Quote:
Originally Posted by .ƒaℓsє. View Post
Alles vorkauen will ich nicht, da auch ein Lerneffekt da sein soll.
Habe dir sogar eine Datenbank(SQL) geschrieben :p

Probier erst einmal selber ein wenig und wenn du echt nicht weiter kommst beschreibe dein Problem genauer, was du probiert hast und wo du nicht weiter kommst und wieso.
So lerne ich aber schon immer^^. Ich such mir die Lösung und gehe sie solange durch bis ich verstanden habe wie sie zustande kommt^^

Bitte :D. Ich verstehe grad gar nichts. Ich will keine Erklärung, ich brauche nur den PHP-Code. Dann sollte ich alles verstehen können. Nur für den ersten Datensatz^^, nicht mal einen ganzen Datensatz sondern nur für Publisher^^. Man muss Join - das habe ich herausgefunden - benutzen.

Ach ja, ich will weiter an meiner eigenen Datenbank arbeiten. Ich möchte nu sehen, wie du das mit deiner Datenbank machst und ob das funktioniert und dann versuche ich meine datenbank zu korrigieren. Wenn ich dann fertig bin, sage ich dir Bescheid :D, aber dafür muss ich sehen wie du das mit deiner machst..^^
05/15/2016 16:18 False#14
Quote:
Originally Posted by Play4free1 View Post
So lerne ich aber schon immer^^. Ich such mir die Lösung und gehe sie solange durch bis ich verstanden habe wie sie zustande kommt^^

Bitte :D. Ich verstehe grad gar nichts. Ich will keine Erklärung, ich brauche nur den PHP-Code. Dann sollte ich alles verstehen können. Nur für den ersten Datensatz^^, nicht mal einen ganzen Datensatz sondern nur für Publisher^^. Man muss Join - das habe ich herausgefunden - benutzen.

Ach ja, ich will weiter an meiner eigenen Datenbank arbeiten. Ich möchte nu sehen, wie du das mit deiner Datenbank machst und ob das funktioniert und dann versuche ich meine datenbank zu korrigieren. Wenn ich dann fertig bin, sage ich dir Bescheid :D, aber dafür muss ich sehen wie du das mit deiner machst..^^
Okay so lerne ich meistens auch, dann schreib nachher was dein Problem war und wie es zu Lösen war ;)

PHP Code:
<?php
$host        
"localhost";$user        "root";$password "";$db           "Play4Free";
$conn = new mysqli($host$user$password$db);
if(
$conn->connect_error){        die("Connectieon failed {$conn->connect_error}");}
$sql "SELECT        videospiel.titel        AS spielTitel,        plattform.name          AS plattform,        publisher.name          AS publisher,        genre.name              AS genreName,        genre.beschreibung      AS genreBeschreibung,        fsk.min_alter           AS minAlterFROM videospielJOIN plattform        ON plattform.id = videospiel.plattformJOIN fsk        ON fsk.id = videospiel.fskJOIN genre        ON genre.id = videospiel.genreJOIN publisher        ON publisher.id = videospiel.publisher";
$result $conn->query($sql);
if (
$result->num_rows  <= 0){        echo "0 results";}else{        while($row $result->fetch_assoc())        {                $spielTitel             $row['spielTitel'];                $plattform              $row['plattform'];                $genreName              $row['genreName'];                $genreBeschreibung      $row['genreBeschreibung'];                $minAlter               $row['minAlter'];
                echo 
"{$spielTitel} {$plattform} {$genreName} {$genreBeschreibung} {$minAlter}<br>";
        }}
$conn->close()?>
Datenbank wäre die, die ich hochgeladen habe.
Natürlich musst du es auf deine Anpassen :p

€: besser formatiert : [Only registered and activated users can see links. Click Here To Register...]
05/15/2016 17:07 Play4free1#15
Ich bin ein ganz großer Trottel. Kein Spaß:
Suche seit Stunden den Fehler und anstatt mal in meine Datenbank zu schauen schaue ich auf meinen Code...
Der Fehler: Vergessen die Zahlen einzusetzen in der Tabelle videospiel....
MAAAAANNNNNNNNNNNNNNNNNN EYYYYYYYYYYYYYYYYYYYYYYYYYYY WIE KANN MAN SO BLÖD SEIN

Danke dir!!!!!!

Quote:
Originally Posted by .ƒaℓsє. View Post
Datenbank wäre die, die ich hochgeladen habe.
Natürlich musst du es auf deine Anpassen :p

€: besser formatiert : [Only registered and activated users can see links. Click Here To Register...]
Wirklich vielen Dank! Ohne dich hätte ich es nicht geschafft. Und ich wunder mich die ganze Zeit warum ees nicht funktioniert... Ich kanns immer noch nicht fassen...