Mysql
 sql >> Database >  >> RDS >> Mysql

Cerca colonne diverse separando una virgola

Dipende se vuoi restituire le righe in cui nome o città corrispondono esattamente ai valori di ricerca (= ), o righe in cui qualsiasi parte del nome o della città corrisponde ai valori di ricerca (LIKE ).

Indipendentemente da quale ti serva, puoi iniziare convertendo la stringa di ricerca in una matrice di stringhe come questa:

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

La array_map('trim'... assicura di non cercare di trovare una corrispondenza con gli spazi prima o dopo le virgole nella stringa di ricerca separata da virgole.

Di seguito sono riportati esempi su come eseguire la query utilizzando istruzioni preparate in PDO. Innanzitutto, corrispondenze complete utilizzando 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);

e corrispondenze parziali 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);