Общие > Базы данных
INTERSECT SELECT ???
Uzver:
Вопрос, можно ли в MySQL организовать конструкцию типа: “INTERSECT SELECT”. Если у кого-то есть опыт построения подобных запросов в MySQL , или предположения буду признателен за любой совет.
NeoNox:
http://dev.mysql.com/doc/mysql/en/UNION.html ?
Uzver:
Проблема в том, UNION реализован только для версии MySQL 4.0.0 и выше, ради одного клинта провайдер не будет менять текущую весрию MySQL
Спасибо, но этот вариант не подходит.
NeoNox:
У меня больше идей нет, до того момента пока ты не расскажешь что тебе нужно сделать(с примерами запросов и струтурой ДБ)
Uzver:
В общих чертах все выглядит следующим образом. Есть таблица, структуру привожу ниже, в которой хранится соответствие некого количества документов на вхождении некоторых терминов а также количество вхождения терминов в документ. Это таблица обратных индексов используемая для организации поиска по сайту.
Задача, необходимо за один запрос, по возможности конечно, выбрать из данной базы все записи соответствующие условию вхождения всех заданных для поиска терминов в документ (именно всех а не их части) с одновременной сортировкой по количеству вхождений.
В настоящий момент задача решается следующим образом, выборка из базы производиться запросом «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;
Навигация
Перейти к полной версии