MrSpoocy: IF & REGEXP in WHERE verwenden.

Hi,

ich habe eine Tabelle in der die UserID und der Name gespeichert werden.
Nun habe ich eine eingabe in der jemand in dieser Tabelle suchen kann.

Meine frage ist, ob diese abfrage Sinvoll / Gut gelöst ist:

SELECT * FROM accounts WHERE IF('1234' REGEXP '[1]+$',id=1234 OR Name LIKE '%1234%',Name LIKE '%1234%')

In diesem Fall ist 1234 die eingabe.

Erklärung: Die abfrage soll bewirken das wenn der User Buchstaben eingibt wird in dem Feld "Name" gesucht, gibt er eine Zahl ein soll das System dies
erkennen und sowohl das Feld "id" als auch "Name" durchsuchen (ein User könnte sich ja z.b. 0815 nennen). Gibt der User nicht nur Zahlen ein,so wird nur in dem Feld "Name" gesucht.

Habe jetzt ein beispiel von mir gepostet das sogar geht. Nun meine frage ob dies ok ist oder ob man was verbessern könnte. Und NEIN ich möchte nicht vorher
per php auf Zahlen prüfen und dann den query erst zusammen stellen !

mfg MrSpoocy


  1. [:digit:] ↩︎

  1. Keine eine Antwort für mich :( ?

  2. Hi,

    Meine frage ist, ob diese abfrage Sinvoll / Gut gelöst ist:

    SELECT * FROM accounts WHERE IF('1234' REGEXP '[1]+$',id=1234 OR Name LIKE '%1234%',Name LIKE '%1234%')

    RegExp sind immer "teuer".
    Und dieser muss auch noch fuer jeden Datensatz erneut ausgewertet werden.

    Erklärung: Die abfrage soll bewirken das wenn der User Buchstaben eingibt wird in dem Feld "Name" gesucht, gibt er eine Zahl ein soll das System dies
    erkennen und sowohl das Feld "id" als auch "Name" durchsuchen (ein User könnte sich ja z.b. 0815 nennen). Gibt der User nicht nur Zahlen ein,so wird nur in dem Feld "Name" gesucht.

    Und selbst wenn er 'abc' eingibt - dann kannst du da problemlos die ID trotzdem mit vergleichen, es wird einfach nie zutreffen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“

    1. [:digit:] ↩︎

  3. Hallo,

    Meine frage ist, ob diese abfrage Sinvoll / Gut gelöst ist:

    nein, weder sinnvoll noch gut.

    SELECT * FROM accounts WHERE IF('1234' REGEXP '[1]+$',id=1234 OR Name LIKE '%1234%',Name LIKE '%1234%')

    Wie wäre es mit einer einfachen OR-Verknüpfung oder einem UNION?

    Willst Du übrigens wirklich auch

    1234a
      b1234

    und ähnliche als zulässige Namen erwischen.

    Freundliche Grüße

    Vinzenz


    1. [:digit:] ↩︎