Maehmann
OC Addicted
|
Hey
Ich hab folgende zwei Tabellen: 1: id, name, dateiname 2: id, name_id, lang_id, titel, text
Jetzt wählt der Benutzer eine Sprache aus, welche in eine Session geschrieben wird($lang_id)
Jetzt möchte ich aus der Tabelle 1 alle namen auslesen für die in der Tabelle 2 noch kein Titel/Text eingefügt wurde (heißt, dass kein entsprechender Datensatz existiert).
Kleines Beispiel sollte nicht ganz klar sein was ich brauche:
Tabelle 1: 1, hansi, hansi.jpg 2, peppi, peppibild.jpg 3, franz, bild.jpg
Tabelle 2: 1, 1, de, Doktor, blabalabala 2, 2, en, Doctor, englischer blabla
Ich möchte jetzt haben, dass ich die Sprache "Deutsch" auswähle und als Ergebnis des Querys soll rauskommen:
2, peppi 3, franz
Oder ich suchen nach "Englisch", dann sollt das Ergebnis so aussehen:
1, hansi 3, franz
Geht das überhaupt? Wenn ja, wie?
*tia*
Christoph
|
atrox
in fairy dust... I trust!
|
das geht entweder mit einem subselect (arg.. mysql!) oder mit einem outer join:
zb so: SELECT tabelle1.id,tabelle1.name FROM tabelle1 LEFT OUTER JOIN tabelle2 ON tabelle1.id=tabelle2.id WHERE tabelle2.id IS NULL;
ich hoffe natürlich, du benennst die tabellen nach den entitäten
|
Maehmann
OC Addicted
|
hmmm ... ganz versteh ichs nicht ... die eine tabelle heißt "namen" und die zweite heißt "texte" warum sollt ich die beiden tabellen über die ids verknüpfen? Die haben ja miteinander nichts zu tun ... Wenn dann müsst ich sie doch per namen.id = texte.name_id verknüpfen, oder? Das funkt aber auch nicht  Und irgendwie muss noch die lang_id irgendwie in den Query rein ...
|
watchout
Legendundead
|
$querystring = "SELECT namen.id, namen.name
FROM namen,texte
WHERE namen.id=texte.namensid
AND texte.titel IS NULL
AND texte.text IS NULL
AND texte.lang={$_SESSION[lang_id]}"
funkt, vorrausgesetzt die felder die NULL sein müssen _können_ NULL sein und haben keinen default-wert, sonst muss der defaultwert damit ersetzt werden ob der select das schnellste mögliche is weiss ich nicht, aber funken sollts... Edit: Aja, und du hättest ruhig dazuschreiben können dass es um mysql in php geht...
Bearbeitet von watchout am 21.09.2003, 21:48 (code - plop, die lang vergessen... und nomal...)
|
Maehmann
OC Addicted
|
Hey.
Thx erstmal ...
das funktioniert allerdings nur, wenn ich schon in der Tabelle "texte" einen Datensatz hab mit ausgefüllten id, namen_id, und lang_id Feldern... das Problem ist, dass es diesen Datensatz ja noch garnicht gibt.
|
watchout
Legendundead
|
Hey.
Thx erstmal ...
das funktioniert allerdings nur, wenn ich schon in der Tabelle "texte" einen Datensatz hab mit ausgefüllten id, namen_id, und lang_id Feldern... das Problem ist, dass es diesen Datensatz ja noch garnicht gibt. oh, ich schätze mal ich hab das flasch verstanden  in dem fall is atrox' beispiel ja schon richtig, nur muss es natürlich auch richtig angewendet werden (des beispiel is von der mysql-doku iirc - richtig atrox?  ) so ungefähr SELECT namen.id,namen.name FROM namen
LEFT OUTER JOIN texte ON namen.id=texte.namenid
WHERE texte.namensid IS NULL;
hth
|
atrox
in fairy dust... I trust!
|
hmmm ... ganz versteh ichs nicht ... die eine tabelle heißt "namen" und die zweite heißt "texte" hättest auch schon weiter oben schreiben können. ich wollte dir wegweiser sein, für eine fixfertige lösung und getestet ist halt nicht immer drin. (zeit und so...) hätte noch die url zur doku hinzufügen sollen, mein fehler.
|
Maehmann
OC Addicted
|
okay danke ... werd mir das heut am Abend anschauen ... jetzt heißts Mathe lernen gehen ... god damn it
|
watchout
Legendundead
|
okay danke ... werd mir das heut am Abend anschauen ... jetzt heißts Mathe lernen gehen ... god damn it  hmm, ich bin irgendwie scho a kipferl... jetz hab ich schowieder die lang vergessen SELECT namen.id,namen.name FROM namen
LEFT OUTER JOIN texte ON namen.id=texte.namenid
AND texte.lang='{$_SESSION[lang_id]}'
WHERE texte.namensid IS NULL AND texte.lang IS NULL
das is tatsächlich nicht grad einfach, sollte aber so funken... *schweissvonderstirnwisch*
|
Maehmann
OC Addicted
|
SELECT namen.id,namen.name FROM namen
LEFT OUTER JOIN texte ON namen.id=texte.namenid
AND texte.lang='{$_SESSION[lang_id]}'
WHERE texte.namensid IS NULL AND texte.lang IS NULL
Yeah  Big THX ... das funktioniert, soweit ich das auf die schnelle beurteilen kann  *gleichweiterprogrammier* Edit: Wenn ich mehr Zeit hab, muss ich mir nochmal genau anschauen, was der Query jetzt genau macht ^^
Bearbeitet von Maehmann am 22.09.2003, 18:46
|
watchout
Legendundead
|
geil, das funkt?  ich habs eigentlich net geglaubt, hab mir joins eben das erste mal geben
|
atrox
in fairy dust... I trust!
|
die funktionsweise ist leicht erklärt: beim outer join wird für jeden nicht vorhandenen datensatz im join ein datensatz mit lauter null-werten erzeugt - so daß der join trotzdem klappt. fragt man nun nach genau diesem null-wert ab, erhält man quasi alle nicht-vorhandenen joins.
|
watchout
Legendundead
|
die funktionsweise ist leicht erklärt: beim outer join wird für jeden nicht vorhandenen datensatz im join ein datensatz mit lauter null-werten erzeugt - so daß der join trotzdem klappt. fragt man nun nach genau diesem null-wert ab, erhält man quasi alle nicht-vorhandenen joins. also, laut doku geht das gleiche auch mit nem innerjoin...
|
Maehmann
OC Addicted
|
|
watchout
Legendundead
|
|