IF & REGEXP in WHERE verwenden.
MrSpoocy
- datenbank
0 MrSpoocy0 ChrisB0 Vinzenz Mai
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
[:digit:] ↩︎
Keine eine Antwort für mich :( ?
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
[:digit:] ↩︎
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
[:digit:] ↩︎