mysqli Abfrage mit PHP - nur bestimmte Datensätze

Hallo alle zusammen,

habe eine Spalte Test in meiner Datenbank.
Da ist z.B. folgender Inhalt drin: 1;3;5;13

Jetzt würde ich gerne alle Datensätze haben, bei denen in der Spalte Test die 3 vorkommt.
Mit welchem Befehl wäre dies zu lösen?

FALSCH: Mit diesem Befehl würde ich z.B. auch die 33 bekommen
SQL:
SELECT * FROM `tabelle` WHERE `test` = "3%"

FALSCH: Mit diesem Befehl würde ich z.B. auch die 13 bekommen
SQL:
SELECT * FROM `tabelle` WHERE `test` = "%3"

FALSCH: Mit diesem Befehl würde ich z.B. auch die 13 und 33 bekommen
SQL:
SELECT * FROM `tabelle` WHERE `test` = "%3%"
 
Hi,

das Datenbankschema ist zwar nicht gerade optimal für sowas (siehe Normalformen, pro Spalte immer nur ein Wert), aber mit Regular Expressions lässt sich dein Problem lösen:
http://regexr.com/3artc

Evtl musst du den Regex noch für MySQL anpassen, aber mit einer Abfrage der folgenden Art solltest du das ohne Probleme machen können (mit einem Prepared Statement Paramter):
SQL:
SELECT * FROM `tabelle` WHERE `test` REGEXP CONCAT('^(.*;)?(', ?, ')(;.*)?$');

Grüsse,
BK
 
wo genau gibt denn in diesem Befehl die "3" rein?

Update:
So klappt es, danke:)
SQL:
SELECT * FROM `active_monsters` WHERE `user_list` REGEXP CONCAT('^(.*;)?(', 3, ')(;.*)?$')
 
Der Parameter 3 wird dem prepared Statement übergeben, daher das ? im SQL-Statement. Ich gehe nicht davon aus, dass du mit etwas anderem als prepared Statements arbeitest, oder?
 
Ansonsten mit FIND_IN_SET() und REPLACE() da der erste Befehl mit , und nicht mit ; arbeitet
SQL:
WHERE FIND_IN_SET(?, REPLACE(user_list, ';', ','))
 

Neue Beiträge

Zurück