sql >> Base de Datos >  >> RDS >> Mysql

Buscar diferentes columnas por una separación de una coma

Esto depende de si desea devolver filas donde el nombre o la ciudad coincidan exactamente con los valores de búsqueda (= ), o filas donde cualquier parte del nombre o ciudad coincida con los valores de búsqueda (LIKE ).

Independientemente de cuál necesite, puede comenzar convirtiendo su cadena de búsqueda en una matriz de cadenas como esta:

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

El array_map('trim'... asegura que no intente hacer coincidir ningún espacio antes o después de las comas en su cadena de búsqueda separada por comas.

Aquí hay ejemplos de cómo ejecutar su consulta usando declaraciones preparadas en PDO. Primero, coincidencias completas usando 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);

y coincidencias parciales usando 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);