Forum Webscript.Ru

Общие => Базы данных => Тема начата: Evgeny от 12 Июля 2002, 17:04:49

Название: Поиск по всей строке данных.
Отправлено: Evgeny от 12 Июля 2002, 17:04:49
Привет всем.
Базами данных недавно занялся, поэтому прошу прощения, если задаю стандартный или глупый вопрос.
Подскажите пожалуйста, как составить строку sql - запроса, чтобы выбрать все строки данных из таблицы Table1, в которых содержится текст "TEXT-TEXT", независимо от поля.
Т.е. поиск должен осуществляться по всем полям.
Большое спасибо.
Название: Поиск по всей строке данных.
Отправлено: fidget от 12 Июля 2002, 17:26:05
ну если ты хочешь одним запросом, то
SELECT * FROM table_name
WHERE column1 like \'%TEXT-TEXT%\'
OR cloumn2 like \'%TEXT-TEXT%\'  ...
и так все столбцы.

если ты заранее не знаешь какие столбцы в таблице, то тогда 2 запроса
1. знаешь столбцы из таблицы
2. делаешь выборку :)

ПС: тут только вчера обсуждали про поиск по всей базе по всем таблицам, похоже на твое только масштаб покрупнее :)
почитай, я думаю тебе будет тоже полезно
Название: Поиск по всей строке данных.
Отправлено: Serchey от 14 Июля 2002, 12:03:25
Привет. Есть еще один способ, смотри, возможно подойдет.
При создании таблицы укажи параметр \'FULLTEXT(col1,col2,..)\' для текстовых полей, а потом задай поиск \'SELECT * FROM mytable WHERE MATCH (col1,col2,..) AGAINST (\'слово поиска\');\'.
Учти, что если совпадения будут болбше чем в 50% рядков - поиск вернет 0 полей. Это справедливо, иначе сколько б информации пришлось виплюнуть с 1Gb таблици!?
Название: Поиск по всей строке данных.
Отправлено: fidget от 15 Июля 2002, 11:35:11
Есть еще один способ, смотри, возможно подойдет.
ему надо будет использовать в таком случае полнотекстовый поиск IN BOOLEAN MODE, а для этого создать полнотекстовые индексы на все текстовые поля, что мне кажется совсем не оптимально :(
кроме того, полнотекстовые поиск работает только с полями типа varchar и text, что накладывает существенные ограничения..
ИМХО FULLTEXT здесь далеко не самый лучший вариант.
Название: Поиск по всей строке данных.
Отправлено: Alexandr от 15 Июля 2002, 14:47:20
fidget
Цитировать
Есть еще один способ, смотри, возможно подойдет.

А работает быстро?
Быстрее чем ,например ,
"молоко сгущёное"
tovar LIKE \'%молоко%\' AND tovar LIKE \'%сгущёное%\'
///
Я давно уже думаю над вопросом как поисковики (ya, google)
ищут так быстро (до 1 сек.) в 10 и более гиговых базах.
Название: Поиск по всей строке данных.
Отправлено: fidget от 15 Июля 2002, 14:53:24
Alexandr
это была цитата предыдущего постинга ;)
я просто не очень люблю
Цитировать
:)

а насчет полнотекстового поиска...
ну на этапе версий 3.23.ХХ и 4.0.1 для простых запросов, особенно если обычные индексы будут использоваться, то LIKE таки лучше чем полнотекстовый :)

если тебе нужно более расширенные запросы делать (комбинировать несколько LIKE и т.д.), то я думаю есть смысл присмотреться к полнотекстовому :) тем более что в 4.0.2, которая вышла на прошлой неделе было пофиксено много багов из 4.0.1 :) да и индексацию полнотекстовую там кажется улучшать собирались :)
Название: Поиск по всей строке данных.
Отправлено: Evgeny от 29 Июля 2002, 16:53:15
Прошу прощения, что поднял эту стаарую тему, просто не хочется новую создавать из-за такой мелочи.
Не подскажет ли кто-нибудь, как в SQL можно игнорировать регистр.
Т.е. для вышеприведенного примера нужно чтобы нашлись, содержащие следующий текст:
Text-text,
TEXT-text, и т.д.
Название: Поиск по всей строке данных.
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 17:03:24
а он и так игнорируется.
Если
1. поле не блоб.
2. Настроен чарсет.
Название: Поиск по всей строке данных.
Отправлено: Evgeny от 29 Июля 2002, 17:08:35
Цитировать
а он и так игнорируется.

Странно, у меня не игнорируется.
1. Поле по-моему не блоб. Как это можно узнать?
2. Что такое чарсет и как с этим бороться?
Название: Поиск по всей строке данных.
Отправлено: fidget от 29 Июля 2002, 17:16:15
1. desc table_name
даст тебе описание таблица и типов столбцов, вот и посмотри blob или нет :)
2. character set :)
посмотри в мануал - там написано что это такое :)
в твоем случае это может повлиять, если у тебя стоит какой-нить latin1 , а ты ищешь русские слова...
Название: Поиск по всей строке данных.
Отправлено: Evgeny от 29 Июля 2002, 17:36:47
Цитировать
1. desc table_name

Это SQL?
БД у меня - информикс.
Такой код (php) не сработал:

...
$rid=ifx_prepare("desc TABLE_NAME1",$conn_id);
ifx_do($rid);
ifx_htmltbl_result ($rid, "border=\\"1\\"");
ifx_free_result($rid);
...

Что неправильно делаю?

Цитировать
2. character set
посмотри в мануал - там написано что это такое

А где он находится? С удовольствием посмотрел бы.

Русские буквы я не ищу, и character - кирилица здесь точно стоять не может...
До сих пор так и не пойму, в чём дело :(
Название: Поиск по всей строке данных.
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 18:13:26
Это mysql :-)
Приношу свои извинения :-)
Название: Поиск по всей строке данных.
Отправлено: Evgeny от 29 Июля 2002, 18:19:54
Цитировать
Это mysql :-)

Эот значит, что в информиксе регистр не игнорируется по умолчанию. Или это вообще не имеет отношения к БД, а к SQL?
Ну так как же это "нечто" заставить игнорировать регистр?
Название: Поиск по всей строке данных.
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 18:50:18
Это значит, что надо либо подождать специалиста по информиксу или прочесть документацию по нему же.
Название: Поиск по всей строке данных.
Отправлено: Evgeny от 29 Июля 2002, 19:01:44
А кто здесь специалист по информиксу и где можно почитать о нём что-нибудь, желательно на русском?
Название: Поиск по всей строке данных.
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 19:10:30
http://www.ya.ru - тут точно можно найти.