"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

(MySQL) Natural Join - Problem

Skystalker 05.01.2004 - 18:39 961 5
Posts

Skystalker

Bloody Newbie
Avatar
Registered: Dec 2002
Location: NiederAustria
Posts: 2
hi,

ich will eine liste von files ausgeben, mit den dazugehörigen autoren, der kategorie und dem status

hier mal meine Tabels:

dldb_authors
--------------
AID | aname

dldb_categories
----------------
CID | cname

dldb_states
-------------
SID | sname

dldb_files
------------------------------------
ID | fname | date | AID | SID | CID

ich hab mir alles so hergerichtet das ich mit einem NATURAL JOIN das auf einmal auslesen kann

mein Query:

SELECT ID, fname, UNIX_TIMESTAMP(date) AS date, aname, sname
FROM dldb_files
NATURAL JOIN dldb_authors, dldb_states
WHERE CID = $id
ORDER BY fname

er gibt mir sogar das richtige aus nur leider doppelt, weil ich 2 stadien gespeichert habe,
wenn ich dldb_states mit dldb_authors vertausche gibt ers mir 3fach aus weil ich 3 autoren habe
auch noch zu sagen ist, wenn ich den teil nach dem JOIN also "WHERE CID = $id ORDER BY fname" weglasse funktioniert alles, aber so kann ich es nicht gebrauchen

ich verwende MySQL 4.0.12
und PHP 4.3.2-RC1

ich hoffe mir kann wer helfen, ich nehm auch ganz andere lösungen in kauf
Bearbeitet von Skystalker am 11.01.2004, 02:45

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Das ist mir suspekt. Ich würd jedenfalls einfach inner join verwenden und händisch angeben, worüber gejoined werden soll.

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
das ist bei joins nun mal so: wenn ich zu einem haupt-datensatz mehrere detail-datensätze habe, dann wird der hauptdatensatz so oft wiederholt, wie es detail-datensätze gibt. bestimmte idente doppelte ausgaben kann man jedoch mit dem keyword "distinct" verhindern (genaueres bitte nachlesen, um die uhrzeit würde meine erklärung wohl zu abstrus klingen)

was für eine ausgabe hättest du denn erwartet ?

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Aber was mir dabei komisch vorkommt, ist, dass die Reihenfolge der Tables die Anzahl der Ergebnissätze ändert.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
sag mal, wozu hast du eigentlich "categories"?

ich tät dir auf jeden fall auch ein inner-join empfehlen ;)
mit using() is das ja dann auch net so viel arbeit ;)

Skystalker

Bloody Newbie
Avatar
Registered: Dec 2002
Location: NiederAustria
Posts: 2
danke mal für die antworten, ich werds wenn es sich heut noch ausgeht, ausprobieren

in categories stehen die kategorien wie zb.: Spiele, Filme, Musik, usw... man kann immerwieder neue erstellen

ganauso wie autoren, stadien (fertig, in arbeit) und eben files

und den query brauch ich da oben, wenn zum beispiel jemand die kategorie film auswählt, alle filme anzuzeigen, oder zb.: den autor xy nur die files von ihm
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz