Автор Тема: INTERSECT SELECT ???  (Прочитано 4519 раз)

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

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« : 15 Ноября 2004, 17:16:20 »
Вопрос, можно ли в MySQL организовать конструкцию типа: “INTERSECT SELECT”. Если у кого-то есть опыт построения подобных запросов в MySQL , или предположения буду признателен за любой совет.
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #1 : 15 Ноября 2004, 17:31:34 »
The documentations is your friend

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #2 : 15 Ноября 2004, 17:38:56 »
Проблема в том, UNION реализован только для версии MySQL 4.0.0 и выше, ради одного клинта провайдер не будет менять текущую весрию MySQL

Спасибо, но этот вариант не подходит.
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #3 : 15 Ноября 2004, 19:28:19 »
У меня больше идей нет, до того момента пока ты не расскажешь что тебе нужно сделать(с примерами запросов и струтурой ДБ)
The documentations is your friend

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #4 : 16 Ноября 2004, 10:36:18 »
В общих чертах все выглядит следующим образом. Есть таблица, структуру привожу ниже, в которой хранится соответствие некого количества документов на вхождении некоторых терминов а также количество вхождения терминов в документ. Это таблица обратных индексов используемая для организации поиска по сайту.

Задача, необходимо за один запрос, по возможности конечно, выбрать из данной базы все записи соответствующие условию вхождения всех заданных для поиска терминов в документ (именно всех а не их части) с одновременной сортировкой по  количеству вхождений.

В настоящий момент задача решается следующим образом, выборка из базы производиться запросом «SELECT id_page FROM TermInDoc WHERE id_word=\'…\' OR id_word=\'…\' OR id_word=\'…\' ORDER BY id_page» с перебором всех заданных для поиска терминов. Затем результат сваливается в массив по которому уже и производится сортировка на соттветсвие и сортировка по реливалентности. Такая схема достаточно сносно работает для небольших сайтов, но вот для крупных, портальных систем она начинает захлебываться, точнее отнимать слишком много ресурсов. Пока сайт еще не дорос до отдельного сервера, поэтому возникла необходимость максимально оптимизировать структуру поискового алгоритма. Да и в случае с выделенным сервером лучше чтобы задача выполнялась максимально быстро при минимальных затратах ресурсов.


CREATE TABLE `TermInDoc` (
  `id` int(11) NOT NULL auto_increment,
  `id_word` int(11) NOT NULL default \'0\',
  `id_page` int(11) NOT NULL default \'0\',
  `amount` int(11) NOT NULL default \'0\'
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
INTERSECT SELECT ???
« Ответ #5 : 16 Ноября 2004, 11:00:04 »
Uzver
Цитировать

SELECT id_page FROM TermInDoc WHERE id_word=\'…\' OR id_word=\'…\' OR id_word=\'…\' ORDER BY id_page


SELECT id_page, SUM(amount) AS amount
FROM TermInDoc
WHERE id_word IN([перечисление]) GROUP BY id_page ORDER BY amount DESC, id_page

Примерно так, если я правильно понял

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #6 : 16 Ноября 2004, 11:20:49 »
Забыл еще одну немаловажную деталь. Поскольку поиск работает в двух режимах «точный поиск» - поиск на точное соответствие заданных поисковых терминов и «приближенный поиск» - поиск по всем возможным «словоформам» от каждого из заданных терминов. В первом случае все как раз и ограничивается одним единственным запросом описанным ранее, а вот во втором случае количество запросов возрастает на количество всех возможных «словоформ» для каждого из заданных терминов с последующим сведением результатов. Вот именно в этом случае и кроется «бутылочное горлышко» алгоритма.
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
INTERSECT SELECT ???
« Ответ #7 : 16 Ноября 2004, 13:15:46 »
Uzver
Зачем делать по запросы для каждой словоформы...???
And no religion too...

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #8 : 16 Ноября 2004, 13:21:14 »
чтобы выбрать все возможные сочетания
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
INTERSECT SELECT ???
« Ответ #9 : 16 Ноября 2004, 13:21:20 »
не проще ли для каждого word_id определить список словоформ...?
And no religion too...

Оффлайн Uzver

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
INTERSECT SELECT ???
« Ответ #10 : 16 Ноября 2004, 13:34:25 »
например?
В твоих руках все \"за\" и \"против\"
Тебе дарован меч судьбы.  Цену большую заплатив,  Ты жизнь не мыслишь без борьбы  За право \"быть\", а не \"казаться\",  И за собою жечь мосты.  Ты мир заставишь прогибаться,  Иначе ты - уже не ты!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
INTERSECT SELECT ???
« Ответ #11 : 16 Ноября 2004, 13:42:30 »
Uzver
ну что например.... определяешь словоформы для word_id запрос на определение word_id по словоформе и запрос на определение page и всё...
And no religion too...

 

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