|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : vitus@ice.ru 2:5020/400 10 Oct 2001 19:24:52 To : "PROext" Subject : Re: Поиск & MySQL -------------------------------------------------------------------------------- PROext <info@proext.com> wrote: >> P>Есть массив слов, которые нужно найти >> P>Кто делал т.н. релевантный поиск? >> P>Hапример, сначала выдаются записи, содержащие все три слова, потом - >> P>содержащие два, потом - одно из массива. >> P>Посредством одного вызова SELCT это не сделать... >> >> Сделать. GROUP BY ключ записи, ORDER BY COUNT слово >> >> >> Для иллюстрации - есть таблица keywords вида word varchar(20), >> document_id number. >> >> select document_id, count(word) from keywords >> where word in (?,?,?) >> group by document_id >> order by 2 P>Хм... Задача несколько пртивоположна... :) P>В поле word - не одно, а несколько слов, Hет, в реляционной модели в таблице keywords должно быть несколько _записей_ c одинаковым document_id но разными словами. А первичным ключом должна быть пара document_id,word. Hеявно предполагается существование рядом таблицы document, ключом которой является document_id, а поле document_id в таблице keywords является внешним ключом, указывающим на эту таблицу. Если структурировать базу таким образом, то задача решается средствами SQL. Посплитить по запятой можно в перле, до покладания информации в базу. P>пользователь задает критерий поиска (например, два слова). P>Hужно сначала показать те записи word, где встречаются оба эти слова, P>а потом - те записи word, где хотя бы одно. Задачу я понял. Вопрос в том, что для того, чтобы задачи решались, нужно базу проектировать правильно. Хранение в поле нескольких значений в корне противоречит реляционной модели. И, соответственно, лишает нас возможности пользоваться всей мощью sql. (правда, когда начинаешь ей пользоваться, вскоре обнаруживаешь что SQL тебе нужен настоящий, а не my-) Ах, черт, это не su.dbms.sql!! -- Victor Wagner vitus@ice.ru Chief Technical Officer Office:7-(095)-748-53-88 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus --- ifmail v.2.15dev5 * Origin: FT-center (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/9509067c40fe.html, оценка из 5, голосов 10
|