Поиск различных столбцов путем разделения запятой

У меня есть таблица, которая содержит информацию, такую ​​как имена, адреса электронной почты, номера и т. Д. Моя база данных

Давайте притворимся, что у меня есть 30 контактов с тем же именем, но все они живут в разных городах. Как разбить запятую и заменить ее and ...

Пример SELECT * WHERE name %$searchString% OR city %$searchString%...

Теперь, если $searchString содержит запятую

SELECT * WHERE name %$searchString% OR city %$searchString%... AND SELECT * WHERE name %$searchString2% OR city %$searchString2%...

$searchString2 содержит информацию, разделенную запятой.

Обновить

Я хочу искать каждую строку снова и снова столько раз, сколько запятые существуют. Мне жаль, что я не могу объяснить себя

Solutions Collecting From Web of "Поиск различных столбцов путем разделения запятой"

Это зависит от того, хотите ли вы возвращать строки, где имя или город соответствуют значениям поиска точно ( = ), или строкам, где любая часть имени или города соответствует значениям поиска ( LIKE ).

Независимо от того, какой из них вам нужен, вы можете начать с преобразования своей строки поиска в массив строк, например:

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

array_map('trim'... гарантирует, что вы не пытаетесь сопоставить любые пробелы до запятой или после запятой в вашей строке поиска, разделенной запятой.

Ниже приведены примеры выполнения запроса с использованием подготовленных инструкций в PDO. Во-первых, полные совпадения с использованием 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); 

и частичные совпадения с использованием 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); 

Вы должны использовать WHERE IN в инструкции SQL.

 SELECT * WHERE name LIKE '%$searchString%' AND city IN ('city1', 'city2', 'city3'...) 

Вот хорошее обсуждение того, как это сделать в PHP: передача массива в запрос с использованием предложения WHERE

Что-то вроде этого?

Вам нужно будет избежать / очистить значение searchString.

 <?php // $searchString = "Cardiff,London,New York"; $SQL = 'SELECT * FROM table WHERE '; $searchStrings = explode(',',$searchString); $SQLArray = array(); foreach($searchStrings as $searchString) { $SQLArray[] = "name LIKE '%$searchString%'"; $SQLArray[] = "city LIKE '%$searchString%'"; } $SQL .= implode(' OR ',$SQLArray); // print $SQL; ?>