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.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: организовать такой поиск по словам
vanya_sl
Отправлено: 25 Июля, 2013 - 14:23:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Добрый день!
У меня есть БД, в БД таблица "Words" в табици поле "Word", в поле вписано например набор слов: Привет Лол Купить Баран ПХП.
Пользователь вводит в текстовое поле слово, нажимает кнопку, идет поиск по словам в поле "Word", если такое слово есть, то выбивает определенный текст.
Как организовать такой поиск по словам?
И возможно ли?

(Отредактировано автором: 25 Июля, 2013 - 14:24:12)

 
 Top
teddy
Отправлено: 25 Июля, 2013 - 14:35:18
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




vanya_sl
Можно.

PHP:
скопировать код в буфер обмена
  1.  
  2. $search = "То, что ищем";
  3.  
  4. $query = mysql_query("SELECT `word` FROM `words` WHERE `word` LIKE '%$search%'");
  5. $row = mysql_fetch_assoc($query);
  6.  
  7. echo "Результат: ".$row['word'];
  8.  

В переменную $search отправляем то, что ищем
(Добавление)
Кстати mysql_* не уже пригодно для использования, переходите на mysqli

(Отредактировано автором: 25 Июля, 2013 - 14:36:18)

 
 Top
EuGen Администратор
Отправлено: 25 Июля, 2013 - 14:42:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




teddy
Не то, поскольку слова могут идти в произвольном порядке. В общем случае - следует построить полнотекстовый индекс и использовать его.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
soffrick
Отправлено: 25 Июля, 2013 - 14:43:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)





Цитата:
Лол Баран ПХП

мысли вслух? Ха-ха

(Добавление)
да ... до чего тебя жизнь довела, что нормальную рандомную строку приудмать не можешь Ха-ха


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
teddy
Отправлено: 25 Июля, 2013 - 15:41:22
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
А можно пример такого запроса? Я поискал в интернете по вашей рекомендации(на Английском читать не стал, не очень хорошо его знаю) но за то нашел другой пример по запросу полнотекстовый индекс

PHP:
скопировать код в буфер обмена
  1. ("SELECT `word` FROM `table` WHERE MATCH (word) AGAINST ('$search')")


Вот то что я нашел, но тесты привели к неудаче... Если не сложно покажите пожалуйста пример

И мне и ТС пойдет на пользу

(Отредактировано автором: 25 Июля, 2013 - 15:44:49)

 
 Top
vanya_sl
Отправлено: 25 Июля, 2013 - 17:08:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




EuGen
Да. Покажите пожалуйста. Интересно ...
 
 Top
soffrick
Отправлено: 25 Июля, 2013 - 17:13:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




индекс fulltext то создайте
(Добавление)
и убедитесь что таблицы myisam


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
teddy
Отправлено: 25 Июля, 2013 - 17:15:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




soffrick пишет:
индекс fulltext то создайте
(Добавление)
и убедитесь что таблицы myisam

была такая проблема. Выдавало ошибку в таком случае. Создал индекс и таблу сделал myisam - ошибки прошли а вот результат 0
 
 Top
vanya_sl
Отправлено: 25 Июля, 2013 - 17:32:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)





А если мне нужно искать по полю из двух переменных $st1 и $st2? То как записать?
 
 Top
EuGen Администратор
Отправлено: 25 Июля, 2013 - 17:36:41
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




vanya_sl, teddy
CODE (SQL):
скопировать код в буфер обмена
  1. mysql> SHOW CREATE TABLE tbl20130725;
  2. +-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. | TABLE       | CREATE TABLE                                                                                                                                                                                                                   |
  4. +-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | tbl20130725 | CREATE TABLE `tbl20130725` (
  6.   `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  7.   `word` varchar(255) DEFAULT NULL,
  8.   PRIMARY KEY (`id`),
  9.   FULLTEXT KEY `word` (`word`)
  10. ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |
  11. +-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  12. 1 row IN SET (0.00 sec)
  13.  
  14. mysql> SELECT * FROM tbl20130725;
  15. +----+---------------------+
  16. | id | word                |
  17. +----+---------------------+
  18. |  1 | figure gain jazz    |
  19. |  2 | bargain dust source |
  20. |  3 | rfoo geny ipro tiny |
  21. |  4 | com3 simplex xlow   |
  22. +----+---------------------+
  23. 4 rows IN SET (0.00 sec)
  24.  
  25. mysql> SELECT * FROM tbl20130725 WHERE match(word) against ('bargain simplex');
  26. +----+---------------------+
  27. | id | word                |
  28. +----+---------------------+
  29. |  2 | bargain dust source |
  30. |  4 | com3 simplex xlow   |
  31. +----+---------------------+
  32. 2 rows IN SET (0.00 sec)

- однако следует помнить одну важную вещь. В MySQL существуют ограничения на длину поисковой строки, из-за которого поисковые запросы могут не работать. Соответственно, минимум длины - это настройка ft_min_word_len, максимум длины - ft_max_word_len. Посмотреть это можно, например, так:
CODE (SQL):
скопировать код в буфер обмена
  1. mysql> SHOW VARIABLES LIKE 'ft_%';
  2. +--------------------------+----------------+
  3. | Variable_name            | Value          |
  4. +--------------------------+----------------+
  5. | ft_boolean_syntax        | + -><()~*:""&| |
  6. | ft_max_word_len          | 84             |
  7. | ft_min_word_len          | 4              |
  8. | ft_query_expansion_limit | 20             |
  9. | ft_stopword_file         | (built-IN)     |
  10. +--------------------------+----------------+
  11. 5 rows IN SET (0.00 sec)

- наглядный пример, у меня минимальная длина строки запроса есть 4, значит, трёхсимвольный запрос не приведёт к результату, даже если подстрока имеется.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 25 Июля, 2013 - 17:43:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
Спасибо большое за наглядный пример! Узнал что то новое, но почему то у меня снова не работает. Пробовал с разной длиной строки, результат SHOW VARIABLES LIKE 'ft_%'; у нас с вами одинаковый.

Может ли ещё от чего нибудь так, что бы запрос прошел но результатов не было?

Если нет, то походу я где то тупанул просто... но на первый взгляд все сходится и запрос и min/max длина для запроса. Как уже сказал выше тестил с разной длиной
 
 Top
EuGen Администратор
Отправлено: 25 Июля, 2013 - 17:46:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




teddy
Например, кодировка(charset) и/или сравнение(collation)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 25 Июля, 2013 - 18:08:46
Post Id


Участник


Покинул форум
Сообщений всего: 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

Но если у вас все нормально работает, видимо это я что то делаю не так...

Посмотрю потом зачем. Спасибо ещё раз
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB