Автор Тема: Поиск по всей строке данных.  (Прочитано 6258 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« : 12 Июля 2002, 17:04:49 »
Привет всем.
Базами данных недавно занялся, поэтому прошу прощения, если задаю стандартный или глупый вопрос.
Подскажите пожалуйста, как составить строку sql - запроса, чтобы выбрать все строки данных из таблицы Table1, в которых содержится текст "TEXT-TEXT", независимо от поля.
Т.е. поиск должен осуществляться по всем полям.
Большое спасибо.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #1 : 12 Июля 2002, 17:26:05 »
ну если ты хочешь одним запросом, то
SELECT * FROM table_name
WHERE column1 like \'%TEXT-TEXT%\'
OR cloumn2 like \'%TEXT-TEXT%\'  ...
и так все столбцы.

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

ПС: тут только вчера обсуждали про поиск по всей базе по всем таблицам, похоже на твое только масштаб покрупнее :)
почитай, я думаю тебе будет тоже полезно
На Машине Тьюринга далеко не уедешь.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Поиск по всей строке данных.
« Ответ #2 : 14 Июля 2002, 12:03:25 »
Привет. Есть еще один способ, смотри, возможно подойдет.
При создании таблицы укажи параметр \'FULLTEXT(col1,col2,..)\' для текстовых полей, а потом задай поиск \'SELECT * FROM mytable WHERE MATCH (col1,col2,..) AGAINST (\'слово поиска\');\'.
Учти, что если совпадения будут болбше чем в 50% рядков - поиск вернет 0 полей. Это справедливо, иначе сколько б информации пришлось виплюнуть с 1Gb таблици!?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #3 : 15 Июля 2002, 11:35:11 »
Есть еще один способ, смотри, возможно подойдет.
ему надо будет использовать в таком случае полнотекстовый поиск IN BOOLEAN MODE, а для этого создать полнотекстовые индексы на все текстовые поля, что мне кажется совсем не оптимально :(
кроме того, полнотекстовые поиск работает только с полями типа varchar и text, что накладывает существенные ограничения..
ИМХО FULLTEXT здесь далеко не самый лучший вариант.
На Машине Тьюринга далеко не уедешь.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Поиск по всей строке данных.
« Ответ #4 : 15 Июля 2002, 14:47:20 »
fidget
Цитировать
Есть еще один способ, смотри, возможно подойдет.

А работает быстро?
Быстрее чем ,например ,
"молоко сгущёное"
tovar LIKE \'%молоко%\' AND tovar LIKE \'%сгущёное%\'
///
Я давно уже думаю над вопросом как поисковики (ya, google)
ищут так быстро (до 1 сек.) в 10 и более гиговых базах.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #5 : 15 Июля 2002, 14:53:24 »
Alexandr
это была цитата предыдущего постинга ;)
я просто не очень люблю
Цитировать
:)

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

если тебе нужно более расширенные запросы делать (комбинировать несколько LIKE и т.д.), то я думаю есть смысл присмотреться к полнотекстовому :) тем более что в 4.0.2, которая вышла на прошлой неделе было пофиксено много багов из 4.0.1 :) да и индексацию полнотекстовую там кажется улучшать собирались :)
На Машине Тьюринга далеко не уедешь.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« Ответ #6 : 29 Июля 2002, 16:53:15 »
Прошу прощения, что поднял эту стаарую тему, просто не хочется новую создавать из-за такой мелочи.
Не подскажет ли кто-нибудь, как в SQL можно игнорировать регистр.
Т.е. для вышеприведенного примера нужно чтобы нашлись, содержащие следующий текст:
Text-text,
TEXT-text, и т.д.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #7 : 29 Июля 2002, 17:03:24 »
а он и так игнорируется.
Если
1. поле не блоб.
2. Настроен чарсет.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« Ответ #8 : 29 Июля 2002, 17:08:35 »
Цитировать
а он и так игнорируется.

Странно, у меня не игнорируется.
1. Поле по-моему не блоб. Как это можно узнать?
2. Что такое чарсет и как с этим бороться?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #9 : 29 Июля 2002, 17:16:15 »
1. desc table_name
даст тебе описание таблица и типов столбцов, вот и посмотри blob или нет :)
2. character set :)
посмотри в мануал - там написано что это такое :)
в твоем случае это может повлиять, если у тебя стоит какой-нить latin1 , а ты ищешь русские слова...
На Машине Тьюринга далеко не уедешь.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« Ответ #10 : 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, 17:42:00 от Evgeny »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #11 : 29 Июля 2002, 18:13:26 »
Это mysql :-)
Приношу свои извинения :-)

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« Ответ #12 : 29 Июля 2002, 18:19:54 »
Цитировать
Это mysql :-)

Эот значит, что в информиксе регистр не игнорируется по умолчанию. Или это вообще не имеет отношения к БД, а к SQL?
Ну так как же это "нечто" заставить игнорировать регистр?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по всей строке данных.
« Ответ #13 : 29 Июля 2002, 18:50:18 »
Это значит, что надо либо подождать специалиста по информиксу или прочесть документацию по нему же.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по всей строке данных.
« Ответ #14 : 29 Июля 2002, 19:01:44 »
А кто здесь специалист по информиксу и где можно почитать о нём что-нибудь, желательно на русском?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28