it-swarm.com.de

MySQL Query String enthält

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
269
arik

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.

391
Wolph

Verwenden:

SELECT *
  FROM `table`
 WHERE INSTR(`column`, '{$needle}') > 0

Referenz:

130
OMG Ponies
WHERE `column` LIKE '%$needle%'
47
chris

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
");
23
risnandar

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}'
10
Joshua Powell

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.

3

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

0
Andres