sql >> Databáze >  >> RDS >> Mysql

Hledejte v různých sloupcích oddělením čárky

To závisí na tom, zda chcete vrátit řádky, kde název nebo město přesně odpovídají hledaným hodnotám (= ), nebo řádky, kde je jakákoli část názvu nebo města odpovídají hledaným hodnotám (LIKE ).

Bez ohledu na to, který z nich potřebujete, můžete začít převodem hledaného řetězce na pole řetězců, jako je tento:

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

array_map('trim'... zajišťuje, že se ve vyhledávacím řetězci odděleném čárkami nepokoušíte najít žádné mezery před nebo za čárkami.

Zde jsou příklady, jak provést dotaz pomocí připravených příkazů v PDO. Nejprve úplné shody pomocí 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);

a částečné shody pomocí 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);


  1. Nejrychlejší způsob, jak vložit/aktualizovat milion řádků v Laravel 5.7

  2. Otočte tabulku a zobrazte n uspořádaných časových řad

  3. Optimalizace logiky MySql

  4. Přidejte sloupec za dalším sloupcem