Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquisar colunas diferentes por uma separação de uma vírgula


Isso depende se você deseja retornar linhas em que o nome ou a cidade correspondam exatamente aos valores de pesquisa (= ), ou linhas onde qualquer parte do nome ou cidade corresponder aos valores de pesquisa (LIKE ).

Independentemente de qual você precisa, você pode começar convertendo sua string de pesquisa em uma matriz de strings como esta:
$strings = array_map('trim', explode(',', $searchString));

O array_map('trim'... garante que você não tente corresponder a nenhum espaço antes ou depois das vírgulas em sua string de pesquisa separada por vírgulas.

Aqui estão exemplos de como executar sua consulta usando instruções preparadas no PDO. Primeiro, correspondências 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);

e correspondências parciais 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);