Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Durchsuchen Sie verschiedene Spalten durch Kommatrennung

Dies hängt davon ab, ob Sie Zeilen zurückgeben möchten, in denen Name oder Stadt genau mit den Suchwerten übereinstimmen (= ) oder Zeilen, in denen ein beliebiger Teil des Namens oder der Stadt enthalten ist mit den Suchwerten übereinstimmen (LIKE ).

Unabhängig davon, welche Sie benötigen, können Sie damit beginnen, Ihre Suchzeichenfolge in ein Array von Zeichenfolgen wie die folgende umzuwandeln:

$strings = array_map('trim', explode(',', $searchString));

Die array_map('trim'... stellt sicher, dass Sie nicht versuchen, Leerzeichen vor oder nach den Kommas in Ihrer kommagetrennten Suchzeichenfolge zu finden.

Hier sind Beispiele, wie Sie Ihre Abfrage mit vorbereiteten Anweisungen in PDO ausführen können. Zuerst vollständige Übereinstimmungen mit IN :

$phs = rtrim(str_repeat('?,', count($strings)),',');
$stmt = $pdo->prepare("SELECT * FROM your_table WHERE name IN ($phs) OR city IN ($phs)");
// double the string values to us in both INs
$values = array_merge($strings, $strings);
$stmt->execute($values);

und Teilübereinstimmungen mit LIKE :

$sql = '';
foreach ($strings as $string) {
    $sql .= ' name LIKE ? OR city LIKE ? OR';
    $values[] = $string;
    $values[] = $string;
}
$stmt = $pdo->prepare('SELECT * FROM your_table WHERE' . rtrim($sql, ' OR'));
$stmt->execute($values);