INNER JOIN 3 Tabellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anwendung
array
auslese
beibehalten
beispiel
code
erfahrung
falsch macht
forum
hersteller
legen
logik
machen
perfekt danke
situation
system
tabelle
url
verarbeitung
vorkommen
-
Hi,
ich komm net weiter, ich hab eine Tabelle "system" in der der Wert id="1" steht, und will nun per INNER JOIN die beiden Tabellen "content" und "filesX" auslesen.
Genauer gesagt will ich aus den beiden Tabellen alle einträge haben welche uid="1" / sid="1" sind
ICh habe bisher dashier:
SELECT s.id, c.uid, f.sid FROM system AS s INNER JOIN content AS c ON s.id = c.uid INNER JOIN filesX AS f ON c.uid = f.sid
ISt das erste mal das ich damit arbeite, ich hab auch keine Ahnung ob es was besserees gibt, aber falls ja hät ich gerne ein Beispiel von euch, das in etwa an meine Situation angepasst ist. Mit den Links zu anderen Foren kann ich nix anfangen.
Wenn ich den Code oben verwende bekomme ich leider nur das hier raus nach der verarbeitung:
Array ( [data] => Array ( [system] => Array ( [id] => 1 [uid] => 1 [sid] => 1 ) [content] => Array ( [id] => 1 [uid] => 1 [sid] => 1 ) ) )
Das ganze wird einfach per while schleife / mysql_fetch_array() gespeichert. Die 3 Tabellen sind nur ein Beispiel, es sollten beliebig mehr JOINs angehängt werden können.
Ich hoffe ihr könnt mir helfen.
Grüsse
Color -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Abend,
so nach kurzen drüberfliegen is an dem Code nix falsch, macht ja das was du dem gesagt hast.
Du stellst in deinem Beitrag eine Bedingung (Alle Einträge welche uid=1...) - und wie drückt man das in SQL aus? Genau mit "WHERE"...
Dein Problem liegt weniger an den JOINS sondern mehr an der Logik. -
Es kann aber vorkommen das in einer der Beiden Tabellen "content" und "filesX" keine uid = 1 oder sid = 1 vohanden ist. Dann funkitoniert WHERE aber nichtmehr.
ich schicke per array die 3 tabelle in eine funktion welche ich geschrieben habe, damit es dieses query erzeugt, ich bin der Meinung das das Ergebniss eig, so ausehen müsste:
Array ( [data] => Array ( [system] => Array ( [id] => 1 [uid] => 1 [sid] => 1 ) [content] => Array ( [id] => 1 [uid] => 1 [sid] => 1 ) [filesX] => Array ( [id] => 1 [uid] => 1 [sid] => 1 ) ) )
Beitrag zuletzt geändert: 2.10.2009 8:44:07 von color -
color schrieb:
Es kann aber vorkommen das in einer der Beiden Tabellen "content" und "filesX" keine uid = 1 oder sid = 1 vohanden ist. Dann funkitoniert WHERE aber nichtmehr.
Entweder verhindest du das dies vorkommen kann, denn du hättest dann aus meiner Sicht ungültige Daten oder du musst zwei getrennte Anweisungen schreiben. -
Wenn du den Fall abdecken willst, das die IDs nicht in allen 3 Tabellen existieren, dann nimm ein outer oder left oder right join anstelle des Inner Joins. Vielleicht erinnern wir uns daran, was ein Join eigentlich macht: Nämlich nichts anderes als das Kreuzprodukt aus zwei Tabellen bilden. Der Joincontraint "ON" besagt dann, welche Zeilen beibehalten werden sollen und der Rest wird weggeschmissen. Durch die Zusätze LEFT und RIGHT und INNER und OUTER kann das Verhalten noch weiter bestimmt werden. Näheres findest du im Handbuch deines DBMS, zum Beispiel unter http://dev.mysql.com/doc/refman/5.1/de/join.html.
-
color schrieb:
Perfekt, danke schön.
Das ist im meine erste Anwendung mit JOIN, ich habe nur wenig in Erfahrung gebracht was mit weiterhelfen hätte können. Aber die Seite is cool.
Grüsse
Color
Die Seite ist nicht "cool", sondern die einzige Quelle die für mysql von Relevanz ist. Das ist die offizielle Dokumentation von den Herstellern. Alles, was du in Foren liegst, musst du erst dreimal auf die Goldwaage legen. Alles, was du in ominösen Tutorials liest, kann heute gelten und morgen veraltet sein. Alles, was aber in der Spec von mysql selbst steht, ist richtig, abgeschlossen und aktuell. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage