Autor |
Nachricht |
remote
Threadersteller
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht:
|
Verfasst Sa 08.03.2008 01:03
Titel [SQL] Problem mit Join Abfrage |
|
|
Nun habe ich hier ein seltsames Problem mit einer SQL Abfrage in Verbindung mit REGEXP.
Involviert sind folgende tables:
Code: |
dict_de dict_en de_en
+-------+--------+ +-------+--------+ +----------------+
| id | word | | id | word | | de | en |
+-------+--------+ +-------+--------+ +----------------+
| 8 | Jacke | | 15 | jacket | | 8 | 15 |
+-------+--------+ +-------+--------+ +----------------+
|
Was mich irritiert, ist der Umstand, dass ich für das erste Query mit dem deutschen Suchwort (untenstehend) das gewünschte Result bekomme, für das zweite Query aber zero. Bis auf das Suchwort sind die queries identisch.
Code: |
SELECT g.word AS gword, e.word AS eword, e.id AS eid, g.id AS gid, i.rating
FROM dict_en AS e
JOIN de_en AS i ON ( i.en = e.id )
JOIN dict_de AS g ON i.de = g.id
WHERE (
g.word REGEXP '^(Jacke)$'
AND g.id = i.de
)
OR (
e.word REGEXP '^(Jacke)$'
AND e.id = i.en
)
|
Code: |
SELECT g.word AS gword, e.word AS eword, e.id AS eid, g.id AS gid, i.rating
FROM dict_en AS e
JOIN de_en AS i ON ( i.en = e.id )
JOIN dict_de AS g ON i.de = g.id
WHERE (
g.word REGEXP '^(jacket)$'
AND g.id = i.de
)
OR (
e.word REGEXP '^(jacket)$'
AND e.id = i.en
)
|
... um das Chaos perfekt zu machen, liefert die Suche mit REGEXP 'jacket' oder LIKE 'jacket' wieder das erwartete Resultat.
... bin für jeden Hinweis dankbar
|
|
|
|
|
achwasweisich
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Sa 08.03.2008 11:35
Titel
|
|
|
Also zuerst mal würde ich den JOIN so aufbauen, daß man ihn leichter versteht.
Ist Geschmackssache, aber ich finde es so wesentlich besser verständlich:
Code: |
SELECT g.word AS gword, e.word AS eword, e.id AS eid, g.id AS gid, i.rating
FROM de_en AS i
JOIN dict_en AS e ON i.en = e.id
JOIN dict_de AS g ON i.de = g.id
|
Dann verstehe ich nicht, warum Du da immer noch diese AND Bedingung
reinschreibst. Du hast doch schon den INNER JOIN über die id.
Code: |
WHERE (g.word REGEXP '^(Jacke)$')
OR (e.word REGEXP '^(Jacke)$')
|
Das sollte doch reichen. Warum dder Teil mit dem AND? Steh ich da irgendwo auf dem Schlauch?
Zu Deinem eigentlichen Problem:
Dein Problem deutet ja darauf hin, daß in der englischen Tabelle folgendes nicht gefunden
werden kann:
ANFANG-DES-STRINGSjacketENDE-DES-STRINGS
während
IRGENDWASjacketIRGENDWAS ja scheinbar gefunden wird.
Bist Du Dir 100% sicher, daß in der Zeile wirklich nur "jacket" drinsteht? Leerzeichen? Zeilenende? Irgendwas?
Warum setzt Du das Wort eigentlich in eine Klammer?
^suchbegriff$ würde doch reichen, oder?
Was passiert bei dieser Variante?
|
|
|
|
|
Anzeige
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
Verfasst Sa 08.03.2008 11:35
Titel
|
|
|
hmm sehr kurios..
Aber man könnte den Join auch en bisschen optmieren, hab jetzt 5 Minuten gebraucht um die Logik zu verstehen
Also Du willst nach den Namen suchen? Versteh ich das soweit richtig?
Da würde doch ein Join reichen oder ?? Bzw. wenn man die IDs für die Multilinugualität in einer Tabelle speichert.
dict
[id] Inc
[de] Deutsch
[en] Englisch
table_foreignKeys
[id] Inc
[objId] verweist auf ID in dict (dann nach sprache)
Oder sehe ich das falsch ??
Ist aber auch noch früh am Tag ^^
// Edit: zu langsam
Zuletzt bearbeitet von Kraat am Sa 08.03.2008 11:36, insgesamt 1-mal bearbeitet
|
|
|
|
|
remote
Threadersteller
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht:
|
Verfasst Sa 08.03.2008 13:38
Titel
|
|
|
achwasweisich hat geschrieben: | Zeilenende? |
<-
trim() beim Einlesen der Wortlisten wirkt wunder.
Vielen herzlichen Dank für den Zaun. Ich geh mich jetzt mal schämen
Kraat hat geschrieben: | [...Vorschlag...] |
Klappt nicht, weil es durchaus auch 2 oder mehr matches auf ein und das selbe Wort geben kann (jacket -> Jacke, Anorack, Mantel etc pp.) welche wiederum auf n englische Wörter verweisen können.
|
|
|
|
|
achwasweisich
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Sa 08.03.2008 14:54
Titel
|
|
|
Was das richtig geile ist:
Du warst derjenige, der mich in meinem Thread bezüglich Increment drauf gebracht hat,
daß bei mir die Variable kein integer ist, weil eben auch noch ein Zeichen hinten dran hing.
|
|
|
|
|
remote
Threadersteller
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht:
|
Verfasst Sa 08.03.2008 16:10
Titel
|
|
|
achwasweisich hat geschrieben: | Was das richtig geile ist:
Du warst derjenige, der mich in meinem Thread bezüglich Increment drauf gebracht hat,
daß bei mir die Variable kein integer ist, weil eben auch noch ein Zeichen hinten dran hing.
|
..ja eigentlich wollte ich auch schreiben, ich stelle mich zu XYZ in die ecke... als ich dann nachgeguckt habe, wer denn nochmal XYZ war, hab ich es mir verkniffen
Naja - wird mir so schnell nciht wieder passieren
|
|
|
|
|
|
|
|
Ähnliche Themen |
[MYSQL & PHP || GELÖST] -> Join-Abfrage
SQL Abfrage mit LEFT JOIN bleibt hängen
MySQL: Left JOIN Problem
[SQL] LEFT JOIN + UPDATE Problem
[PHP]Problem mit Mysql Abfrage
[PHP/MYSQL] Abfrage - Problem
|
|