Автор Тема: Нестандартная выборка в базе  (Прочитано 4180 раз)

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

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Нестандартная выборка в базе
« : 14 Апреля 2003, 22:28:40 »
Нужно чтобы в таблице шла выборка по такому принципу. В условии where указанные несколько столбцов.
Пример:
where kolonka1 like \'%$word%\' or kolonka2 like \'%$word%\' or kolonka3 like \'%$word%\'.
Но выборка шла по приоритетному слобцу. Т.е. все смотрится в первом столбце, после окончания смотрится во втором, после окончания в третьем и т.д.
См. иллюстрацию:
http://volgoart.ru/demo.gif

По идее это можно разбить на несколько запросов. Но необходимо выполнить условие, чтобы не выбирались одни и те же строки по несколько раз.
Посему, как я полагаю, все это нужно объединить в один запрос. Но как я это сделать - не знаю.
Буду благодарен, как за краткий ответ, так и за полный и развернутый.

И еще - в догонку. Есть ячейки типа TEXT.
Поиск ведется по ключевому слову (LIKE \'%$word%\'). Нужно что бы при выводе выводились только 250 символов до слова и 250 после (для примера). Как это реализовать средствами SQL?

Заранее благодарен.
С уважением Сергей

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Нестандартная выборка в базе
« Ответ #1 : 15 Апреля 2003, 01:20:03 »
Kwazar
СУБД указывай в вопросе.
Для mysql:

1. По поводу уникальных строк - SELECT DISTINCT ...
Остальная часть вопроса как-то не по программистски описана ;)
Не понял чем тебе просто OR не подошел (кстати может AND нужен)

2. В mysql есть строковые функции locate() и substring
Будет что-то вроде
SELECT substring(field, locate(\'keyword\',field), 500) ...
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Нестандартная выборка в базе
« Ответ #2 : 15 Апреля 2003, 09:52:23 »
Макс,
Да, БД MySQL.
Логика проста. Ищет данные в одном столбце, потом переходим на 2-й, далее на 3-й и т.д.
Т.е. у меня есть таблица с данными страниц. Нужно сделать релевантный поиск. В первом столбце находится титл страницы, во второй заголовки, в третьей тег Б, в четвортой вся текстовка сайта.
Нужно, что бы вначале шла выборка по титлу, потом по заголовкам, потом по Б, а потом по остальной текстовке.
2. Спасибо, покапаю маны в этом направлении
С уважением Сергей

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Нестандартная выборка в базе
« Ответ #3 : 15 Апреля 2003, 12:43:33 »
посмотри еще на полнотекстовый поиск, возможно он тебе пригодится.
На Машине Тьюринга далеко не уедешь.

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Нестандартная выборка в базе
« Ответ #4 : 15 Апреля 2003, 13:30:35 »
fidget
это что за зверь и где он обитает?
С уважением Сергей

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Нестандартная выборка в базе
« Ответ #5 : 15 Апреля 2003, 17:42:02 »
http://www.mysql.com/doc/en/Fulltext_Search.html

если учесть что в исходных твоих запросах

Цитировать
:
Пример:
where kolonka1 like \'%$word%\' or kolonka2 like \'%$word%\' or kolonka3 like \'%$word%\'.

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

Оффлайн я...

  • scum of the earth
  • Старожил
  • ****
  • Сообщений: 293
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.vlad.myths.ru
Нестандартная выборка в базе
« Ответ #6 : 17 Апреля 2003, 15:27:10 »
Цитировать

where kolonka1 like \'%$word%\' or kolonka2 like \'%$word%\' or kolonka3 like \'%$word%\'.

а так?

where 
(kolonka1 LIKE \'%$word%\' or kolonka2 like \'%$word%\' or kolonka3 like \'%$word%\')

пытался?
или это глупо?..
...вот такой я весёлый зверёк...
 Home page

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Нестандартная выборка в базе
« Ответ #7 : 17 Апреля 2003, 15:29:04 »
> пытался?

а чем твой запрос отличается принципиально от того , что он писал? ;)
На Машине Тьюринга далеко не уедешь.

Оффлайн я...

  • scum of the earth
  • Старожил
  • ****
  • Сообщений: 293
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.vlad.myths.ru
Нестандартная выборка в базе
« Ответ #8 : 17 Апреля 2003, 15:31:41 »
не поверишь... скобками...
...вот такой я весёлый зверёк...
 Home page

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Нестандартная выборка в базе
« Ответ #9 : 17 Апреля 2003, 18:31:04 »
я...
эти скобки сделают выборку c портировкой релевантности по столбцам, а не по строкам?
С уважением Сергей

 

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