Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с LIKE-запросом.

4.6K
13 октября 2009 года
SerG1nho
72 / / 30.10.2006
Доброго времени суток.

Суть проблемы -
Клиентская база данных. На форме есть ОДНО поле-input в которое пользователь вводит first_name и last_name клиента.

Составляю запрос типа
 
Код:
SELECT * From 'some_table'
WHERE first_name LIKE '%$keyword%'  //$keyword - переменная PHP


Как мне организовать запрос в случае, если пользователь в input введёт имя И фамилию? к примеру 'Василий Иванов'?

Заранее спасибо, надеюсь растолковал:).
288
13 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: SerG1nho

Как мне организовать запрос в случае, если пользователь в input введёт имя И фамилию? к примеру 'Василий Иванов'?



Лучше всего не париться, а добавить второе поле, чтобы не пытаться обработать различный ввод пользователя (сначала имя потом фамилия, сначала фамилия потом имя, имя и фамилия с одним пробелом между, с двумя ну и т.п.).
Дайте пользователю наименьшие привелегии и вам же будет легче :)

4.6K
13 октября 2009 года
SerG1nho
72 / / 30.10.2006
Цитата: nikitozz
Лучше всего не париться, а добавить второе поле, чтобы не пытаться обработать различный ввод пользователя (сначала имя потом фамилия, сначала фамилия потом имя, имя и фамилия с одним пробелом между, с двумя ну и т.п.).
Дайте пользователю наименьшие привелегии и вам же будет легче :)



Да в том то и дело, что в ТЗ чётко написано ОДНО поле-input:cool:

385
13 октября 2009 года
SomewherSomehow
477 / / 25.07.2004
Если бд позволяет, можено написать так:
 
Код:
SELECT * From 'some_table'
WHERE first_name + ' ' + last_name LIKE '%$keyword%'

Но, конечно, как уже писалось выше, лучше добавить еще одно поле на форму и объяснить тому кто составлял ТЗ что так будет лучше ибо меньше путаницы
51K
13 октября 2009 года
laba
16 / / 20.08.2009
SELECT * From 'some_table'
WHERE first_name LIKE '%$keyword%'
and last_name LIKE '%$keyword%'
4.6K
13 октября 2009 года
SerG1nho
72 / / 30.10.2006
Цитата: SomewherSomehow
Если бд позволяет, можено написать так:
 
Код:
SELECT * From 'some_table'
WHERE first_name + ' ' + last_name LIKE '%$keyword%'

Но, конечно, как уже писалось выше, лучше добавить еще одно поле на форму и объяснить тому кто составлял ТЗ что так будет лучше ибо меньше путаницы



Спасибо, то что нужно!

Цитата: laba
SELECT * From 'some_table'
WHERE first_name LIKE '%$keyword%'
and last_name LIKE '%$keyword%'



А Ваш вариант - не правильный, ибо first_name '%Иванов Василий%' NOT LIKE 'Иванов'.

5
13 октября 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: SerG1nho
Спасибо, то что нужно!


Я бы использовал вот в такой форме:

 
Код:
SELECT * From 'some_table'
WHERE first_name + ' ' + last_name LIKE '%$keyword%'
OR last_name + ' ' + first_name LIKE '%$keyword%'
4.6K
13 октября 2009 года
SerG1nho
72 / / 30.10.2006
Цитата: hardcase
Я бы использовал вот в такой форме:
 
Код:
SELECT * From 'some_table'
WHERE first_name + ' ' + last_name LIKE '%$keyword%'
OR last_name + ' ' + first_name LIKE '%$keyword%'



Да да, именно так и сделал. На самом деле в моей таблице три поля - first_name, last_name и e-mail, так что пришлось их перетосовывать в запросе.

З.Ы. хорошо, что не 10:o

Большое спасибо за помощь

13
13 октября 2009 года
RussianSpy
3.0K / / 04.07.2006
Не проще ли разбить поисковый запрос на отдельные слова и на основе разбиения построить запрос?
51K
13 октября 2009 года
laba
16 / / 20.08.2009
Цитата: SerG1nho

А Ваш вариант - не правильный, ибо first_name '%Иванов Василий%' NOT LIKE 'Иванов'.



Если Вы ищете записи с keyword='Иванов', то мой запрос не выведет запись с first_name = 'Иванов' и last_name = 'Василий' :)

И наоборот, при поиске с keyword='Иванов Василий', запрос не выведет запись с first_name = 'Иванов' и last_name = ''

Для приведенного примера мой запрос отработает правильно.

Запрос с OR и слиянием через пробел работать будет хуже:
1) запрос or работает долше;
2) а если между иванов и василий будет 2 пробела или запятая? :)

4.6K
13 октября 2009 года
SerG1nho
72 / / 30.10.2006
На сколько я понял, в случае:

keyword = '%Иванов Василий%', если first_name = 'Иванов' , last_name = 'Василий'.

Ваш запрос будет искать: first_name = 'Василий Иванов' AND last_name = 'Василий Иванов', что по сути не верно. Только что проверил.

Поправьте меня, если я не прав.
13
13 октября 2009 года
RussianSpy
3.0K / / 04.07.2006
Цитата: laba

Запрос с OR и слиянием через пробел работать будет хуже:
1) запрос or работает долше;
2) а если между иванов и василий будет 2 пробела или запятая? :)



1) Тут такая система и такая задача что вопрос что дольше или быстрее работает просто неуместен
2) Ничего страшного не будет. Запятую и другие спец символы можно вырезать, а на двойные, тройные и т.д можно поставить простую проверку.

51K
13 октября 2009 года
laba
16 / / 20.08.2009
Цитата: SerG1nho
На сколько я понял, в случае:

keyword = '%Иванов Василий%', если first_name = 'Иванов' , last_name = 'Василий'.

Ваш запрос будет искать: first_name = 'Василий Иванов' AND last_name = 'Василий Иванов', что по сути не верно. Только что проверил.

Поправьте меня, если я не прав.



Да, Вы правы. Сейчас посмотрел запрос он неверен. :( Хотя имел ввиду такое условие (кроме and надо ещё местами поменять):

where keyword like '%'+first_name+'%'
and keyword like '%'+last_name+'%'

325
18 октября 2009 года
Franky
723 / / 10.08.2005
чтобы не плодить темы спрошу здесь, тоже проблема с выборкой. Даже не знаю с какого бока подойти, пока реализовал на РНР.
Суть:
пишу бота, надо реагирование на ключевые фразы. В базе они хранятся в виде строки
Цитата:

тест|але?|есть кто?|эй!|там!


Вот желательно одним запросом отловить запись, содержащую одну из ключевых фраз в ответ на вводимую строку, например "здесь есть кто?"
Заранее спасибо.

2
18 октября 2009 года
squirL
5.6K / / 13.08.2003
SELECT * FROM table WHERE field REGEXP 'регулярка для поиска';
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог