simpler Query mit like führt zu Fehler
T-Rex
- datenbank
Moin,
hab da eine Tabelle. Da ist ein Textfeld drin. Ich mach eine simple like abfrage und bekomme Ergebnisse die nicht der Suchanfrage entsprechen:
select * from table where text like '%suchwort%'
Jetzt werden auch Datensätze gefunden wo "suchwort" nicht im text vorkommt.
MySQL: 5.5.8
Tabellentyp: MyISAM
Gruß
My-Rex
Mittag :)
hab da eine Tabelle. Da ist ein Textfeld drin. Ich mach eine simple like abfrage und bekomme Ergebnisse die nicht der Suchanfrage entsprechen:
select * from table where text like '%suchwort%'
Jetzt werden auch Datensätze gefunden wo "suchwort" nicht im text vorkommt.
Kannst du, wenn möglich, ein Beispiel geben, welches bei dir vorkommt? Also am besten einfach eine Query, wie sie bei dir vorkommt. Der Text hinter Like ist ja ein Regex ausdruck. Dadurch kann es in eingien Fällen zu komischen Ergebnissen kommen.
Grüße,
Junker
Query: SELECT * FROM rezepttext
WHERE REZEPTTEXT\_SEARCH
LIKE '%kuchen%'
Es kommt ein Ergebnis wo "REZEPTTEXT_SEARCH" diesen Content hat:
RISOTT RISOTTOE RISOTTOS RISOTTON RISOTTO TEMPERATURE TEMPERATU TEMPERATURN TEMPERATURS TEMPERATUR REI REISE REISS REISN REIS HÜHNERBRÜHE HÜHNERBRÜH HÜHNERBRÜHEN HÜHNERBRÜHEE HÜHNERBRÜHES ITALIENISCHE ZWIEBELN ZWIEBEL ZWIEBELE
Wie man sieht steckt der String "kuchen" da nicht drin.
Gruß
Torten-Rex
Query: SELECT * FROM
rezepttext
WHEREREZEPTTEXT\_SEARCH
LIKE '%kuchen%'Es kommt ein Ergebnis wo "REZEPTTEXT_SEARCH" diesen Content hat:
RISOTT RISOTTOE RISOTTOS RISOTTON RISOTTO TEMPERATURE TEMPERATU TEMPERATURN TEMPERATURS TEMPERATUR REI REISE REISS REISN REIS HÜHNERBRÜHE HÜHNERBRÜH HÜHNERBRÜHEN HÜHNERBRÜHEE HÜHNERBRÜHES ITALIENISCHE ZWIEBELN ZWIEBEL ZWIEBELE
Wie man sieht steckt der String "kuchen" da nicht drin.
Das ist in der Tat wohl war :D
Vielleicht noch die altbekannte Frage/Ratschlag, ob du auch wirklich nur genau diese Query ausführst, oder ob in deiner Version noch andere Zusätze drin sind oder weitere Befehle, die die ausgeführte Query oder den zurückgegeben Datensatz beeinflussen. Oftmals sind Fehler an Stellen, wo man sie nicht erwartet.....
Grüße,
Junker
Am Ende ist es schon ein größerer Query. Doch allein das kleine Ding was ich gepostet habe, liefert im phpmyadmin mist zurück. Ich hab local sogar schon die Indexe gelöscht.
Auch ein versuch auf match against um zu steigen hat zwar bessere aber immer noch fehlerhafte Ergebnisse geliefert.
Also bei REZEPTTEXT_SEARCH handelt es sich um ein text feld. Da zurückgegebene Ergebnis habe ich auch etwas beschnitten. Das was du da oben siehst (RISOTTO etc.) hat in Wirklichkeit 3000 Zeichen. Eventuell sind das zu viele für ein like?
Gruß
Queryloser
T-Rex
Hallo,
Das was du da oben siehst (RISOTTO etc.) hat in Wirklichkeit 3000 Zeichen.
Und du bist sicher, dass du da keinen Kuchen mit weggeschnitten hast?
Gruß
Kalk
Hallo,
Das was du da oben siehst (RISOTTO etc.) hat in Wirklichkeit 3000 Zeichen.
Und du bist sicher, dass du da keinen Kuchen mit weggeschnitten hast?
Ob das auch mit "Marmelade" klappt könnte auch interessant sein. Vielleicht kommt ja irgendwas mit "küchen" in den Fundstellen vor und wird als "enthält" angesehen weil irgendwas mit der Kodierung nicht stimmt.
Jörg Reinholz
Ob das auch mit "Marmelade" klappt könnte auch interessant sein. Vielleicht kommt ja irgendwas mit "küchen" in den Fundstellen vor und wird als "enthält" angesehen weil irgendwas mit der Kodierung nicht stimmt.
Jörg Reinholz
Du hattest recht. Es wird "küchen" gefunden. Bei Marmelade klappt alles.
Kuchen ist glaube ich das einzige Wort, das mit einem Umlaut geschrieben ein anderes Wort ergibt, dass im gleichen Umfeld zuhause ist...
Die Tabelle und das Feld stehen auf "utf8_general_ci".
Wie muss ich die Kollation einstellen, damit nur noch "kuchen" gefunden wird?
Gruß
utf8_t_rex
Tach!
Du hattest recht. Es wird "küchen" gefunden. Bei Marmelade klappt alles.
Die Tabelle und das Feld stehen auf "utf8_general_ci".
Wie muss ich die Kollation einstellen, damit nur noch "kuchen" gefunden wird?
utf8_bin. Allerdings wird dann auch zwischen Groß- und Kleinschreibung unterschieden. Und man muss nicht unbedingt das Feld umstellen, man kann das auch im Statement machen, indem man das Wort BINARY vor den Feldnamen stellt.
Literatur zu den Unicode-Kollationen: http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-sets.html
dedlfix.
indem man das Wort BINARY vor den Feldnamen stellt.
So?
select * from table where BINARY text like '%suchwort%'
Wenn ja, ich hab es gerade ausprobiert, hat nichts gebracht. Die Ergebnismenge hat sich nicht geändert.
Danke für eure Hilfe !
Gruß
dankbarer
T-Rex
Tach!
Wenn ja, ich hab es gerade ausprobiert, hat nichts gebracht. Die Ergebnismenge hat sich nicht geändert.
Dann erzeug mal bitte in Testszenario, das nur das allernötigste enthält, um den Fehler nachzustellen. Also eine Tabelle mit einem Feld und darin so wenig wie möglich Daten. Du hast sie ja wohl als Stringwurst und nicht normalisiert abgelegt. Wirf soviel Teile raus, bis der Fehler grad noch so da ist. Dann zeig mal einen Export der Tabelle inklusive Daten und Struktur.
dedlfix.
Hey,
Also bei REZEPTTEXT_SEARCH handelt es sich um ein text feld. Da zurückgegebene Ergebnis habe ich auch etwas beschnitten. Das was du da oben siehst (RISOTTO etc.) hat in Wirklichkeit 3000 Zeichen. Eventuell sind das zu viele für ein like?
Zuviele Zeichen sind das nicht, habe schon viel größere textfelder "geliked". Braucht halt nur länger. Wenn du nach '%kuchen%' suchst, und ein Ergebnis kommt zurück, muss da eigentlich auch kuchen drin sein. Schau nochmal genau nach (was du wahrscheinlich eh schon getan hast, aber doppelt gemoppelt hält besser).
Und das mit der Kodierung würde ich auch nochmal näher anschauen (siehe Jörgs Beitrag)
Grüße,
Junker