Zum Inhalt springen

Problem mit INNER JOIN


Wolfang

Empfohlene Beiträge

hi,

mein Name is Wolfang und wollt mal lieb fragen ob mir einer kurz weiterhelfen

könnte. Wie kann ich zwei Tabellen mit INNER JOIN verbinden, weil ich möchte meine echos in eine Tabelle setzen und da is das bisl blöd mit den while schleifen. Deswegen würde ich gerne eine virtuelle Tabelle gerne haben

wo man die 3 Spalten auslesen kann. Meine Datensätze stehen am Ende vom

Beitrag. Es muß irgendwo beim ON der Fehler sein...

Bin echt um jede Hilfe dankbar:)

Ursprüngliches Script mit 2 while schleifen wo das verschachteln nicht möglich macht


$sql2 = mysql_query("SELECT kat_thumb_up FROM admin_video_kategorie");
while($row2 = mysql_fetch_array($sql2)) {
echo "<img src=/fsr/kategorie_video/kategoriebilder/".$row2['kat_thumb_up']."/>\n";
}

$sql = mysql_query("SELECT DISTINCT katname, katid FROM admin_video ORDER BY katid");
while($row = mysql_fetch_array($sql)) {
echo "<a href=/fsr/video.php?kat=".$row['katid'].">".$row['katname']."</a>";
}
[/PHP]

Und jetzt meine 2 Lösungsansätze wo jedoch leider nicht funktionieren:

[PHP]
$sql = ("SELECT admin_video_kategorie.kat_thumb_up,admin_video.katid,admin_video.katname FROM admin_video_kategorie INNER JOIN admin_video ON admin_video_kategorie.kat_thumb_up = admin_video.katname");
while($row = mysql_fetch_array($sql)) {
echo "<img src=/fsr/kategorie_video/kategoriebilder/".$row['kat_thumb_up']."/>\n";
echo "<a href=/fsr/video.php?kat=".$row['katid'].">".$row['katname']."</a>";
}

//2te Idee

$sql = ("SELECT katid, katname FROM admin_video INNER JOIN admin_video_kategorie ON admin_video.kat_thumb_up = admin_video_kategorie.kat_thumb_up");
while($row = mysql_fetch_array($sql)) {
echo "<img src=/fsr/kategorie_video/kategoriebilder/".$row['kat_thumb_up']."/>\n";
echo "<a href=/fsr/video.php?kat=".$row['katid'].">".$row['katname']."</a>";
}


///// Tabellen

CREATE TABLE admin_video
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
katid varchar( 50 ) NOT NULL,
katname varchar( 50 ) NOT NULL,
video_up varchar( 100 ) NOT NULL,
thumb_up varchar( 100 ) NOT NULL,
land varchar( 50 ) NOT NULL,
datum_ort varchar( 50 ) NOT NULL,
baureihe varchar( 50 ) NOT NULL
)
;
CREATE TABLE admin_video_kategorie
(
kat INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
kategorie varchar( 50 ) NOT NULL,
kat_thumb_up varchar( 100 ) NOT NULL
)
;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Anhand Deines Tabellen Layouts ist mir nicht klar wie die Tabellen referenziert sind. Ein Join, egal welcher, muss zwei Tabellen anhand einer PK-FK-Beziehung verknüpfen. Außerdem ist mir völlig schleierhaft warum Du die "katid" auf der "video" Tabelle als VarChar deklarierst, aber auf der "katheogrie" Tabelle als int. Außerdem wäre der "katname" gegen die die 2. Normalform.

Ich würde Dich bitte zunächst Deine Tabellen in die 3. Normalform zu bringen: Normalisierung (Datenbank) ? Wikipedia

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die schnelle Antwort erstmal:), mein Zeil ist es beide Tabellen

zusammenfüge. Könnest du mir das bitte zeigen?

Und müssen eigendlich alle Spalten angegeben sein auch wenn ich nur

kat_thumb_up,katid und katname brauche?

Tabelle "admin_video_kategorie" mit den Spalten (kat,kategorie,kat_thumb_up)

Tabelle "admin_video" mit den Spalten (id,katid,katname,video_up,thumb_up,land,datum_ort ,baureihe)

Der Primärchlüssel von "admin_video_kategorie" ist kat und von "admin_video" ist id.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem ist, das der KatName in die andere Tabelle gehört (Normalisierung), und dass dein Fremdsschlüssel vom selben Format (int) sein muss, wie die ID der zu joinenden Tabelle.

Wenn dieses gegeben ist, kann man eine SQL-Abfrage über beide Tabellen designen, in der nur die benötigten Felder ausgegeben werden.

Jetzt kommen (vor allem aufgrund der zweiten Bemerkung) nur Fehler raus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Könntest du das kurz verwirklichen weil auch

nach studenlangen lesen komme ich nicht weiter:(

Das wird niemand für Dich erledigen (können), denn einmal benötigt man für die Normalformen ein paar Daten und zweitens wird hier niemand wissen, wie Deine Tabellen auszusehen haben. Es wäre für jeden ein Ratespiel, das niemanden etwas bringt. Vor allem solltest Du verstehen was die Normalisierungen bewirken und warum man das macht.

Der gepostete Wikipedia-Artikel enthält ein sehr ähnliches Beispiel, Du musst dieses nur auf Deine beiden Tabellen umsetzen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie meinst du Ratespiel? Es sind doch alle Angaben gegeben.

Welche Spalte braucht jetzt nen anderen Typ.

Möchte doch nur beide Tabellen in einen sql befehl vereinen, so das ich

auf alle spalten zugreifen kann

admin_video

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

katid varchar( 50 ) NOT NULL,

katname varchar( 50 ) NOT NULL,

video_up varchar( 100 ) NOT NULL,

thumb_up varchar( 100 ) NOT NULL,

land varchar( 50 ) NOT NULL,

datum_ort varchar( 50 ) NOT NULL,

baureihe varchar( 50 ) NOT NULL

admin_video_kategorie

kat INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

kategorie varchar( 50 ) NOT NULL,

kat_thumb_up varchar( 100 ) NOT NULL

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie meinst du Ratespiel? Es sind doch alle Angaben gegeben.

Weil ich nicht weiß welche Spalten anhand welcher Beziehung verknüpft werden sollen. Ich kann mir zwar etwas zusammen reimen, aber das hilft relativ wenig.

Möchte doch nur beide Tabellen in einen sql befehl vereinen, so das ich

auf alle spalten zugreifen kann

Ich weiß was Du willst und ich sage Dir, so wie Du es jetzt hast, geht es nicht, weil die Tabellen nicht in der dritten Normalform sind. Du solltest bei den Grundlagen der Datenbanktechnik beginnen und ein ERD entwerfen:

Entity-Relationship-Modell ? Wikipedia

wenn Du dieses dann hast überführst Du es in die Tabellen und bringst es in die dritte Normalform:

Normalisierung (Datenbank) ? Wikipedia

Poste dann einmal das ERD und die dazugehörigen Tabellenstrukturen, dann kann man auch Dir auch mit dem passenden SQL Statement helfen.

Ein Datenbankdesign besteht nicht daraus, dass man einfach ein paar Tabellen anlegt, sondern diese auch richtig modelliert (und auch wenn es letztendlich nur 2 Tabellen sind)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Folgende Lösung wäre möglich:

admin_video

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

katid INT NOT NULL,

--> löschen: katname varchar( 50 ) NOT NULL,

video_up varchar( 100 ) NOT NULL,

thumb_up varchar( 100 ) NOT NULL,

land varchar( 50 ) NOT NULL,

datum_ort varchar( 50 ) NOT NULL,

baureihe varchar( 50 ) NOT NULL

admin_video_kategorie

kat INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

katname varchar( 50 ) NOT NULL,

kat_thumb_up varchar( 100 ) NOT NULL

So könnte dein SQL- Befehl aussehen

SELECT video_up, kat_thumb_up, katid, katname

FROM admin_video, admin_video_kategorie,

WHERE admin_video.katid = admin_video_kategorie.kat

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...