2015-08-28 3 views
1

Извините, если заголовок не очень описательный, я действительно не знал, как это кратко выразить. На моем сайте у меня есть таблица базы данных, полная видеоигры & Команды eSports. Когда я показываю имя Team в URL-адресе, я удаляю из него все пробелы. По этой причине мне нужно принять бессмертную версию имени во время поиска, если кто-то попробует ввести имя, которое они нашли в URL-адресе.SQL Выбор LIKE результатов и точных результатов с заменой()

Пример названия команды: Los Santos Kings

Пример URL: mysite.com/teams/LosSantosKings

Пример поискового запроса # 1: "Лос-Сан" (без кавычек)

Результаты

Пример поиска # 1: Los Santos Kings

Пример поискового запроса # 2: "LosSan" (без кавычек) Результаты

Пример поиска # 1 : empty - 0 строк возвращено

Если вы выполните поиск «Los San», то он возвращает строку базы данных команды. Однако, если вы ищете «LosSan», это не так. Этот метод использования функции SQL replace() отлично работает, когда я тестирую его для точных совпадений, но когда он установлен рядом с запросом LIKE, он не работает в последнем экземпляре.

Вот мой запрос:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%{".str_replace(' ', '', $search)."}%' ORDER BY name ASC" 

Является ли это ошибка синтаксиса, или мне нужно идти об этом по-другому, возможно, с 2 отдельных запросов/проверяет имя команды?

+0

«Это ошибка синтаксиса», дала вам ошибку? – Sablefoste

+0

Нет, это не дает мне никакой ошибки. Вот почему я спрашиваю здесь. То, что я подразумевал под синтаксисом, заключается в том, разрешены ли LIKE и an = в одном запросе. – SISYN

+0

Вы можете использовать столько «LIKE» и '=' в комбинации, сколько хотите, если логика правильная. Но в вашей логике вы используете функцию «replace» для имени столбца. Наверняка вы знаете имя столбца во время вашего запроса? – Sablefoste

ответ

2

Ваш LIKE не является проблемой. Это фигурные скобки. Когда вы написали {$search}, это связано с тем, что вы ввели переменную PHP в строку. Но для str_replace вы все равно нарушаете строку, поэтому вы не должны ее скопировать.

Вот ваша новая строка:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%".str_replace(' ', '', $search)."%' ORDER BY name ASC" 
+0

Спасибо! Выберете свой ответ как правильный, когда он позволит. – SISYN

1

Вам не нужно фигурные скобки на второй.

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%".str_replace(' ', '', $search)."%' ORDER BY name ASC"; 
Смежные вопросы