mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 05:55 Benutzername: Passwort: Auto-Login

Thema: [SQL] Problem mit Join Abfrage vom 08.03.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [SQL] Problem mit Join Abfrage
Autor Nachricht
remote
Threadersteller

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht: Männlich
Verfasst Sa 08.03.2008 01:03
Titel

[SQL] Problem mit Join Abfrage

Antworten mit Zitat Zum Seitenanfang

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 * Ich bin müde... *
  View user's profile Private Nachricht senden
achwasweisich

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst Sa 08.03.2008 11:35
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Sa 08.03.2008 11:35
Titel

Antworten mit Zitat Zum Seitenanfang

hmm sehr kurios..
Aber man könnte den Join auch en bisschen optmieren, hab jetzt 5 Minuten gebraucht um die Logik zu verstehen *Schnief*
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
  View user's profile Private Nachricht senden
remote
Threadersteller

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht: Männlich
Verfasst Sa 08.03.2008 13:38
Titel

Antworten mit Zitat Zum Seitenanfang

achwasweisich hat geschrieben:
Zeilenende?


<- * Ich geb auf... *

trim() beim Einlesen der Wortlisten wirkt wunder.
Vielen herzlichen Dank für den Zaun. Ich geh mich jetzt mal schämen Lächel


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.
  View user's profile Private Nachricht senden
achwasweisich

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst Sa 08.03.2008 14:54
Titel

Antworten mit Zitat Zum Seitenanfang

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.
*ha ha*
  View user's profile Private Nachricht senden
remote
Threadersteller

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht: Männlich
Verfasst Sa 08.03.2008 16:10
Titel

Antworten mit Zitat Zum Seitenanfang

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.
*ha ha*


..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 Grins



Naja - wird mir so schnell nciht wieder passieren Lächel
  View user's profile Private Nachricht senden
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.