2010-09-16 2 views
-2

Я использую php и mysql ...php my sql search без причины «как»?

У меня есть приложение, в котором пользователь вводит любой текст, и я хочу, чтобы связать данные из базы данных, не используя причину «LIKE» в моем запросе mysql.

Есть ли способ поиска этой строки в базе данных.

или любой подход в MySQL, чтобы сделать это ....

Спасибо заранее.

+3

Вы забыли что-то сказать. Что не так с предложением LIKE? –

+1

Можете ли вы уменьшить количество меток '!' И '?' В тексте? Это похоже на крик и очень трудно читать. Спасибо –

ответ

1

Вы можете использовать REGEXP, когда пользователь поставил одно слово, которое вы положили WHERE field REGEXP '.*TEXT.*' в ваш запрос, regex классный, потому что вы можете разрешить пользователю добавлять регулярное выражение в поле поиска.

+1

@Sanjay: Время изучать регулярное выражение;) http://en.wikipedia.org/wiki/Regular_expression – r3zn1k

+0

мы также можем сделать это с помощью match(). –

2

Вы также можете проверить предложение MATCH.

+0

+1 для полнотекстового поиска, если он использует mysql в любом случае. Возможно, ему придется переключиться на myisam, но я предполагаю, что он уже использует это. – Maerlyn

0

Если вы не хотите использовать LIKE, и не указывайте причину, почему (кажется, это хорошо для всех остальных), то вот решение, которое поможет вам разобрать его. (Но это может быть не лучший вариант в реальном мире ...)

Всякий раз, когда что-либо добавляется в базу данных, которую вы хотите найти, принимайте каждое слово и разбивайте его на все возможные комбинации из 1 или более последовательные буквы.

E.g. для стопки:

s, t, a, c, k, st, ta, ac, ck, sta, tac, ack, stac, tack, stack 

Вставьте каждый из них в таблицу с идентификатором, который ссылается на исходные данные.

Тогда вы можете сопоставить любой поисковый запрос с этим списком слов eactly (для полного и частичного совпадений). Если ваш пользователь ищет несколько ключевых слов, вы разбиваете их спереди и ищите по каждому, ища совпадения с одним и тем же идентификатором.