Suchabfrage wird nicht korrekt beantwortet

Parkside

Benutzer
Beiträge
8
Hallo,

ich habe in MariaDB eine einfache kleine Tabelle erstellt, in die Bugs bzw. Issues eingetragen werden sollen. Es gibt u. a. drei Textfelder, zwei davon vom Typ mediumtext. Diese wollte ich durchsuchen mit

Code:
select ID, Title from UD_Issues where Title OR Description like '%edit%';

Dabei werden die Datensätze 1, 16 und 20 gefunden. Wenn ich die Abfrage erweitere auf

Code:
select ID, Title from UD_Issues where Title OR Description OR Verdict like '%edit%';

erhalte ich ein
Code:
empty set
. Das ist streng logisch gesehen falsch. Mir ist dann aufgefallen, daß bei den Statements mit WHERE-Clause diese Warnungen auftreten:

Code:
| Warning | 1292 | Truncated incorrect DECIMAL value: 'Dieses Statement im Tab SEARCH funktioniert:

Meine Recherchen zum Thema haben mich nicht weitergebracht, mir ist unklar, warum ich diese Tabelle nicht mit where-Abfragen durchsuchen kann.

Ich habe die Tabelle mit mysqldump exportiert und hier angehängt (.txt bitte einfach abschneiden).

Vielen Dank für Eure Tips und Unterstützung!

PS: Merkwürdig ist für mich auch, daß nicht alle Suchanfragen scheitern, diese hier z. B. funktioniert:

Code:
SELECT * FROM UD_Issues WHERE Title OR Description OR Verdict LIKE '%Erledigt%';

Daher finde ich auch keinen Anhaltspunkt dafür, was ich verbessern kann bzw. was ich von vornherein falsch mache...
 

Anhänge

Zuletzt bearbeitet:
Werbung:
Hi,

liest sich ja nett, geht aber nicht :-(

Du musst jedes Feld einzeln abfragen

Code:
SELECT * FROM UD_Issues WHERE Title LIKE '%Erledigt%' OR Description LIKE '%Erledigt%'  OR Verdict LIKE '%Erledigt%';


ODER: zuerst die 3 Felder aneinanderhängen und dann testen.

Code:
SELECT * FROM UD_Issues WHERE CONCAT(Title,Description,Verdict) LIKE '%Erledigt%';


Und nur zur Info. LIKE beginnend mit einem % kann keinen Index verwenden. Und somit werden alle Zeilen gelesen und geprüft, was
bei größeren Tabellen das ganze sehr langsam macht
 
Uff! Wieder was gelernt!

Super, ganz herzlichen Dank! - Die Sache mit LIKE und den Indizes ist klar, aber wenn man mit riesigen Texten arbeitet, helfen einem die Indizes ohnehin nicht weiter. Ich müßte dann mehr mit Keywords arbeiten.

Nochmal vielen Dank für die schnelle Hilfe!
 
Nur als kleine Randbemerkung: die Abfrage select ID, Title from UD_Issues where Title OR Description like '%edit%';
würde bei jedem anderen Datenbanksystem zu einem Fehler führen, weil sie syntaktisch falsch ist.

Sie wird als(Title) or (Description like '%edit%') interpretiert, und das wäre nur dann korrekt, wenn Title mit dem dem Datentyp boolean definiert ist. Dann würde es (Title = true) or (Description like '%edit%') bedeuten. Und tatsächlich macht MySQL implizit so etwas ähnliches daraus.
 
Manchmal steht man so auf dem Schlauch... Einmal falsch abgebogen bei der Fehleranalyse und im Wald gelandet.

Daß MariaDB einzelne Spaltenbezeichner dann versucht, als boolean bzw. numerische Werte abzuhandeln, hätte mir gestern auch schon klar werden können, ist es aber nicht 😁. Stattdessen habe ich gerätselt über die Warnmeldungen und dann in Richtung strict mode und so nachgedacht. Natürlich ohne Erfolg.

Also nochmals danke an alle für die Hinweise und Erklärungen!
 
Klingt nach einem MySQL Feature, in MSSQL nimmt er das jedenfalls nicht da kann ich mich auf den Kopf stellen.

Faustregel: Grundsätzlich leitet jedes AND oder OR eine neue Gleichung ein bzw. einen boolischen Ausdruck. Als Ausnahme wüsste ich jetzt nur BETWEEN ... AND ...
 
Klingt nach einem MySQL Feature, in MSSQL nimmt er das jedenfalls nicht da kann ich mich auf den Kopf stellen.

Faustregel: Grundsätzlich leitet jedes AND oder OR eine neue Gleichung ein bzw. einen boolischen Ausdruck. Als Ausnahme wüsste ich jetzt nur BETWEEN ... AND ...
Ja, ich glaube, das werde ich so schnell auch nicht mehr vergessen 😃
 
Ich habe den Fall mal unter PostgreSQL nachgestellt:
Code:
select * from todo
where title or description like '%mit%';
Dort gibt es eine klare Fehlermeldung:
Code:
ERROR:  argument of OR must be type boolean, not type character varying
LINE 2: where title or description like '%mit%'
              ^
Das gefällt mir, ehrlich gesagt, besser. Als Anwender bekommt man da eine klare Linie vorgegeben.
 
wahrscheinlich stelle ich nach und nach alles auf PG um.
und
ich habe in MariaDB eine einfache kleine Tabelle erstellt, in die Bugs bzw. Issues eingetragen werden sollen.
ergibt für mich:
Je eher desto besser!
Ein frisches Projekt kann man am allereinfachsten umstellen.

Und bei der Umstellung gleich daran denken, dass man nicht jede Kurve aus dem Vorgängersystem mitnehmen muss.
Einfach mal schauen, ob es auch geradeaus geht.
Oder im Zweifel hier fragen.
 
Werbung:
Zurück
Oben