|
|
|
|
|
для: Worldmen
(10.11.2006 в 19:11)
| | MySQL следует сообщить, что вы собиратесь работать в логическом режиме
SELECT * , MATCH (name,infa) AGAINST ('телевиз%' IN BOOLEAN MODE) from tovar1;
|
| |
|
|
|
|
|
|
|
для: Yakor
(10.11.2006 в 19:05)
| | Спасибо, уже разобрался. | |
|
|
|
|
|
|
|
для: cheops
(10.11.2006 в 18:55)
| | при использовании %, например - 'телевиз%' - выдает только одну строку.
а при таком варианте - 'телевизо%' - ничего. | |
|
|
|
|
|
|
|
для: Worldmen
(10.11.2006 в 18:29)
| | Функция MATCH ... AGAINST() используется для полнотекстового поиска и возвращает величину релевантности, а функция LIKE производит сравнение с шаблоном, используя операции сравнения простых регулярных выражений в SQL. так что мне MATCH ... AGAINST() больше нравится, тем более что помойму с версии 4.1 можно искать как LIKE'ом ... то есть неполные слова по шаблону...
Кстати! если у Вас в таблице слово "телевизор" присутствует более чем в половине строк - поиск не принесет результатов, что впринципе правильно... представьте выборку полнотекстным поиском из базы огромного объема где к тому же искомое слово есть более чем в каждой второй строчке
Кстати надо помнить что MATCH ... AGAINST() зависит от таких настроек fulltext поиска как: ft_min_word_len & ft_max_word_len. Так что тут:
>"Выводит эти две строки. А если задать параметр "тел" - то ничего не выводит."
нечево возмущаться....
Искомые слова должны содержать четыре или более символов,
т.е. слова "sms", "WAP", "код" обнаружить не удастся,
это связано с конструктивными особенностями
используемой в форуме базы данных.
| - знакомый текст? :))) | |
|
|
|
|
|
|
|
для: Worldmen
(10.11.2006 в 18:29)
| | Следует использовать логический режим полнотекстового поиска, чтобы можно было искать не полные слова, там также как и в LIKE можно использовать % для обозначения любого количества символов после слова.. | |
|
|
|
|
|
|
|
для: Worldmen
(10.11.2006 в 18:29)
| | . | |
|
|
|
|
|
|
| Есть таблица:
CREATE TABLE `tovar1` (
`id` int(3) unsigned NOT NULL auto_increment,
`name` varchar(25) NOT NULL default '',
`img` varchar(70) default '',
`Infa` text,
`tiptov` varchar(50) default 'нет',
PRIMARY KEY (`id`),
KEY `tiptov` (`tiptov`),
FULLTEXT (`name`,`Infa`)
) TYPE=MyISAM;
|
-----------------------------------------
id | name | infa |
-----------------------------------------
3 | телевизор 21" | (MEMO)|
4 | Телевизор 40" | (MEMO)|
...
делаю селект (в поле name )
SELECT * from tovar1 WHERE MATCH (name,infa) AGAINST ('телевизор');
|
Выводит эти две строки. А если задать параметр "тел" - то ничего не выводит. Если делать такую выборку :
SELECT * , MATCH (name,infa) AGAINST ('телевизор') from tovar1;
|
Выводит
-------------------------------------------------------------------------
id | name | infa | MATCH (name,infa) ... |
-------------------------------------------------------------------------
... 0
3 | телевизор 21" | (MEMO)| 0.670031....
4 | Телевизор 40" | (MEMO)| 0.85......
...
А если задать параметр "телевиз" - ничего не выводит.
Я не понимаю, какой смысл использовать функцию MATCH когда можно с успехом пользоваться LIKE? | |
|
|
|
|