Like / Regexp

PHP-Fan

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Problem. Ich schreibe gerade ein Script, was nur Datensätze von bestimmten Buchstabenanfängen anzeigt. Zum Beispiel möchte ich alle Wörter mit dem Anfangsbuchstaben A anzeigen. Mein Befehl:

Code:
SELECT * from berichte WHERE gruppe = '1' AND name LIKE 'a%' ORDER BY name

Das funktioniert auch super nur möchte ich jetzt alle Zahlenanfänge anzeigen. Das klappt aber nicht. Ich habe es mit:

Code:
SELECT * from berichte WHERE gruppe = '1' AND name LIKE '1%' OR '2%' ORDER BY name

versucht aber sobald man ein OR bzw. noch einen LIKE Befehl "hinzufügt" zeigt er mir alle Datensätze an. Auch Datensätze die beide Zahlen nicht einmal beehinhalten. Ich habe gerade im Netz ein wenig gesucht und bin da auf REGEXP gestossen. Aber irgendwie bekomme ich das um diese Uhrzeit nicht mehr hin ich blicke zumindest nicht so wirklich durch. Ich hoffe ihr könnt mir helfen und ich kann morgen gut in den Tag starten. Über Tipps würde ich mich freuen.

Gute Nacht!
 
Servus versuch es mal so:

PHP:
SELECT * from berichte 
WHERE 
gruppe = '1' AND 
name LIKE '1%' OR 
name like '2%' 
ORDER BY name
 
Hallo,


SELECT * from berichte
WHERE
gruppe = '1' AND
name LIKE '1%' OR
name like '2%'
ORDER BY name

hiermit wäre ich sehr vorsichtig, da das ganze falsche Ergebnisse liefern kann:


Aufgrund der höheren Operatoren-Rangfolge, bindet das AND stärker als das OR.

Dadurch ist das Statement, das ausgeführt wird eigentlich dieses:

SQL:
SELECT * from berichte 
 WHERE 
 (gruppe = '1' AND 
  name LIKE '1%' )OR 
  name like '2%' 
  ORDER BY name

Ich gehe aber davon aus, dass du das erreichen möchtest, also musst du klammern:

SQL:
SELECT * from berichte 
 WHERE 
  gruppe = '1' AND 
  (name LIKE '1%' OR 
   name like '2%' )
  ORDER BY name

Was du wegen den Ziffern und regulären Ausdrücken aber eventuell machen könntest ist:

SQL:
SELECT * from berichte 
 WHERE 
 gruppe = '1' AND 
 name RLIKE '^[0-9]'
 ORDER BY name

Markus
 
Zuletzt bearbeitet:
Zurück