2014-09-13 3 views
0

PDO, я хочу использовать поисковый запрос. Я попытался использовать как запрос, используя % как для передней, так и для концевой переменной поиска. но он ищет между словами.PDO поисковый запрос

нравится, если в базе данных есть имя Jhon Anderson, и если я использую переменную поиска, используя LIKE %erson%, запрос доставит мне строку, которая содержит указанное выше имя. Но я хочу, чтобы запрос должен искать только начальные алфавиты, поэтому я попробовал запрос LIKE с Jhon%, я получил желаемый результат, но с помощью этого % в конце работает только в том случае, если переменная поиска соответствует началу первого слова, но что насчет слово после пробела?

Я имею в виду, если я попробую Anderson% или Ander%, запрос не получит меня в результате этой строки, поскольку Андерсон является вторым словом в поле Jhon Anderson после пробела.

Так что мой вопрос заключается в том, как искать в словах после пробелов, что если начальные алфавиты соответствуют поисковому запросу.

Я не знаю, существует ли такой запрос или нет, но я думаю, что это возможно с некоторым циклом после использования подобного запроса с подстановочным знаком '%'.$variable.'%', и после получения всех результатов удаляются массивы или строки, в которых используется переменная поиска не совпадают с первым алфавитом результата.

Любые идеи, как реализовать такой поиск.

запрос прямо сейчас я использую,

$stmt = $conn->prepare("SELECT ROOM, GUEST_NAME, GUEST_FIRST_NAME, CONFIRMATION_NO, DEPARTURE, PWD FROM RESERVATION_GENERAL_2 WHERE LOWER(GUEST_FIRST_NAME) LIKE ? OR LOWER(GUEST_NAME) LIKE ?"); 
$stmt->execute(array('%'.strtolower($searchFilter).'%','%'.strtolower($searchFilter).'%')); 
+1

Можем ли мы видим, что 'query' –

+0

@Hanky ​​웃 Panky Конечно, добавлены как запрос прямо сейчас я использую, но не дает результат желания я хочу. –

+0

Совет. Вы можете использовать разрывы строк в строках в PHP, поэтому в вашем запросе также. Это сделает его более читаемым для вас, если вы это сделаете. – GolezTrol

ответ

1

Немного грязный, но простое решение должно включать пространство в поиске:

WHERE ' ' || Name LIKE '% Anderson%' 

Вы видите, я добавил пробел перед Name, поэтому он также найдет слово, если оно находится в начале строки.

В качестве альтернативы вы можете использовать REGEXP_LIKE, но тогда это все еще немного неудобно, поскольку Oracle не имеет выражения word boundary в своем регулярном выражении. Для решения см this answer

+0

thankyou для ответа sir. Но если есть три пробела, потому что полное имя человека не определено. e-g 'Rameez Hassan Mir', то это снова не сработает? –

+0

Кажется, я забыл один из символов '%'. Я это исправил. Я думаю, что это тоже отлично подходит для г-на Рамеза: 'WHERE '' || Имя LIKE '% Hassan Mir%' 'или' WHERE '' || Имя LIKE '% Mir%' 'должно найти его. – GolezTrol

+0

Вау, это сработало, что ты классный .. он работал в mysql, я тоже попробую это в PDO .. Надеюсь, он там работает .. Многое спасибо .. –

Смежные вопросы