Announcement

Collapse
No announcement yet.

Problem mit CONCAT und NULL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit CONCAT und NULL

    Hallo, in meinem Programm benutze ich neuerdings eine SQL-Abfrage in der Form

    SELECT * FROM tabelle WHERE CONCAT(Feld1, Feld2, Feld3) LIKE %suchbegriff%

    Zuvor hatte ich die Filterung nachträglich im Programm vorgenommen, was natürlich je nach Rechner und Netzanbindung quälend langsam war. Nun geht das rasend schnell, aber ich wundere ich mich, dass ein paar Datensätze nicht angezeigt werden. Hab die Tabelle mit HeidiSQL untersucht, und festgestellt dass diese Datensätze in einem der Felder statt "" den Default-Wert NULL haben.

    Muss ich die Tabelle ändern, damit sie keine NULL-Werte mehr enthält, oder kann ich den SQL-Befehl noch etwas modifizieren, damit NULL-Werte als leerer String behandelt werden? In der MySQL Dokumentation finde ich keine passende Antwort.

    Danke - Günther
    Günther

  • #2
    Originally posted by Günther Weber View Post
    ...In der MySQL Dokumentation finde ich keine passende Antwort.
    Control Flow Functions - IFNULL()
    Auch bezweifle ich das du überhaupt was findest, da dein Statement syntaktisch falsch ist. Literale müssen in einfache Hochkomma geschrieben werden!

    Also z.B. so:
    [highlight=sql]
    SELECT *
    FROM tabelle
    WHERE CONCAT(IFNULL(Feld1, ''), IFNULL(Feld2, ''), IFNULL(Feld3, '')) LIKE '%suchbegriff%'
    [/highlight]

    Sehr performant ist das Ganze jedoch nicht, dass ist dir sicherlich klar. Aus mehreren Gründen ist hier keine Index-Nutzung möglich. Vlt. wäre eine Volltextsuche eine Alternative!?

    Und bitte beachten: Formatierung von SQL in Beiträgen

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Alternativ kannst du auch CONCAT_WS benutzen, das Verhalten bei Null-Werten ist hier anders. Siehe Doku ;-)

      Falk hat aber recht - performancemässig ist das ein sehr schlechter Ansatz. Zudem kann es falsche Resultate geben - ausser das ist explizit so gewünscht.

      Beispiel:
      Feld1: heute
      Feld2: ist
      Feld3: montag
      --> heuteistmontag

      Somit würde z.B. der Suchbegrif "eis" auch einen Treffer landen.

      Comment

      Working...
      X