Ich habe versucht herauszufinden, wie ich mit MySQL eine Abfrage durchführen kann, die prüft, ob der Wert (Zeichenfolge $haystack
) in einer bestimmten Spalte bestimmte Daten enthält (Zeichenfolge $needle
):
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
In PHP heißt die Funktion substr($haystack, $needle)
, also vielleicht:
WHERE substr(`column`, '{$needle}')=1
Ganz einfach:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
Der %
ist ein Platzhalter für jedes Zeichen. Beachten Sie, dass dies bei sehr großen Datenmengen langsam werden kann. Wenn Ihre Datenbank also wächst, müssen Sie Volltextindizes verwenden.
WHERE `column` LIKE '%$needle%'
Meins benutzt LOCATE
in mysql:
LOCATE (substr, str), LOCATE (substr, str, pos)
Diese Funktion ist multibytesicher und unterscheidet nur dann zwischen Groß- und Kleinschreibung, wenn mindestens ein Argument eine Binärzeichenfolge ist.
In deinem Fall:
mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
Neben der Antwort von @WoLpH.
Wenn Sie das Schlüsselwort LIKE
verwenden, können Sie auch die Richtung einschränken, in die der String passt. Zum Beispiel:
Wenn Sie nach einer Zeichenfolge gesucht haben, die mit Ihrem $needle
beginnt:
... WHERE column LIKE '{$needle}%'
Wenn Sie nach einem String gesucht haben, der mit $needle
endet:
... WHERE column LIKE '%{$needle}'
beachten Sie, dass dies gefährlich ist:
WHERE `column` LIKE '%{$needle}%'
zuerst tun:
$needle = mysql_real_escape_string($needle);
so werden mögliche Angriffe verhindert.
Sie suchen wahrscheinlich nach find_in_set
Funktion:
_Where find_in_set($needle,'column') > 0
_
Diese Funktion verhält sich wie in_array
in PHP