Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Интересная задача по БД MySql и PHP.
Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
Добрый день!
У меня есть БД, в БД таблица "Words" в табици поле "Word", в поле вписано например набор слов: Привет Лол Купить Баран ПХП.
Пользователь вводит в текстовое поле слово, нажимает кнопку, идет поиск по словам в поле "Word", если такое слово есть, то выбивает определенный текст.
Как организовать такой поиск по словам?
И возможно ли?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
teddy
Не то, поскольку слова могут идти в произвольном порядке. В общем случае - следует построить полнотекстовый индекс и использовать его.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
soffrick
Отправлено: 25 Июля, 2013 - 14:43:12
Посетитель
Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012 Откуда: Россия, Москва
Помог: 17 раз(а)
Цитата:
Лол Баран ПХП
мысли вслух?
(Добавление)
да ... до чего тебя жизнь довела, что нормальную рандомную строку приудмать не можешь
----- Правильный вопрос - уже половина правильного ответа!
p.s. индусы повсюду, будьте осторожны!
teddy
Отправлено: 25 Июля, 2013 - 15:41:22
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
EuGen
А можно пример такого запроса? Я поискал в интернете по вашей рекомендации(на Английском читать не стал, не очень хорошо его знаю) но за то нашел другой пример по запросу полнотекстовый индекс
mysql>SELECT*FROM tbl20130725 WHERE match(word) against ('bargain simplex');
+----+---------------------+
| id | word |
+----+---------------------+
| 2 | bargain dust source |
| 4 | com3 simplex xlow |
+----+---------------------+
2 rows INSET(0.00 sec)
- однако следует помнить одну важную вещь. В MySQL существуют ограничения на длину поисковой строки, из-за которого поисковые запросы могут не работать. Соответственно, минимум длины - это настройка ft_min_word_len, максимум длины - ft_max_word_len. Посмотреть это можно, например, так:
- наглядный пример, у меня минимальная длина строки запроса есть 4, значит, трёхсимвольный запрос не приведёт к результату, даже если подстрока имеется.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
teddy
Отправлено: 25 Июля, 2013 - 17:43:30
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
EuGen
Спасибо большое за наглядный пример! Узнал что то новое, но почему то у меня снова не работает. Пробовал с разной длиной строки, результат SHOW VARIABLES LIKE 'ft_%'; у нас с вами одинаковый.
Может ли ещё от чего нибудь так, что бы запрос прошел но результатов не было?
Если нет, то походу я где то тупанул просто... но на первый взгляд все сходится и запрос и min/max длина для запроса. Как уже сказал выше тестил с разной длиной
EuGen
Отправлено: 25 Июля, 2013 - 17:46:10
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
teddy
Например, кодировка(charset) и/или сравнение(collation)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
teddy
Отправлено: 25 Июля, 2013 - 18:08:46
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
EuGen
charset у меня utf8 и сравнение utf8_general_ci
Обычные записи типа селект ворд фром вордс выводятся успешно, а вот при MATCH результата нет, как и ошибок. Хотя в строке $search имеется подстрока и её длина соответствует min/max лимиту той строке, которая находится в строке БД, которая в свою очередь имеет в наличии $search.
var_dump($row); возвращает false. А если выводить просто SELECT `word` FROM `words`
тогда var_dump возвращает положительный результат, который содержит в себе подстроку $search
Но если у вас все нормально работает, видимо это я что то делаю не так...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.