У меня есть таблица, которая содержит информацию, такую как имена, адреса электронной почты, номера и т. Д.
Давайте притворимся, что у меня есть 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
содержит информацию, разделенную запятой.
Обновить
Я хочу искать каждую строку снова и снова столько раз, сколько запятые существуют. Мне жаль, что я не могу объяснить себя
Это зависит от того, хотите ли вы возвращать строки, где имя или город соответствуют значениям поиска точно ( =
), или строкам, где любая часть имени или города соответствует значениям поиска ( 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; ?>