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 (Zeichenfolge $needle
) enthält, wie folgt:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
In PHP wird die Funktion aufgerufen substr($haystack, $needle)
, also vielleicht:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
arik
quelle
quelle
column LIKE '...'
ihm ist Groß- und Kleinschreibung, mitcolumn LIKE BINARY '...'
ihm Groß- und KleinschreibungLIKE
vorgeschlagen wird, nach Teilzeichenfolgen zu suchen, da dieser Operator zwei Platzhalterzeichen verwendet:%
und_
. Das heißt, wenn Ihre Zeichenfolge $ Nadel eines dieser Sonderzeichen enthält, sind die Ergebnisse überhaupt nicht wie erwartet. (-1) für diese Antwort und (+1) für die INSTR-Antwort.Verwenden:
Referenz:
quelle
LIKE %...%
verwendet keinen Index, wenn einer vorhanden ist, daher sollten sie gleichwertig sein;LIKE ...%
würde einen Index verwenden, falls vorhanden. Wenn die Leistung ein echtes Problem darstellt, ist die Volltextsuche (FTS) ein besserer Ansatz.like
Operator zu sortieren . Mitinstr
einem Satz kann so bestellt werdenselect * from table order by instr(col1,"mystring")
quelle
Meins verwendet
LOCATE
in MySQL:Diese Funktion ist mehrbyte-sicher und unterscheidet nur zwischen Groß- und Kleinschreibung, wenn mindestens ein Argument eine Binärzeichenfolge ist.
In deinem Fall:
quelle
Neben der Antwort von @WoLpH.
Wenn Sie das
LIKE
Schlüsselwort verwenden, können Sie auch die Richtung einschränken, in die die Zeichenfolge passt. Zum Beispiel:Wenn Sie nach einer Zeichenfolge suchen, die mit Ihrer beginnt
$needle
:Wenn Sie nach einer Zeichenfolge suchen, die mit folgendem endet
$needle
:quelle
Beachten Sie, dass dies gefährlich ist:
zuerst tun:
So werden mögliche Angriffe verhindert.
quelle
mysql_real_escape_string
wird in zukünftigen PHP-Versionen veraltet sein.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Sie suchen wahrscheinlich nach
find_in_set
Funktion:Diese Funktion verhält sich wie eine
in_array
Funktion in PHPquelle