Привет!
>> select count(d.id) from t_documents d, >> (select w.document_id, count(1) as cnt from t_search_words w, >> ( select 2624961196 as wrd from rdb$database union >> select 1902388292 as wrd from rdb$database union >> select 1228066714 as wrd from rdb$database ) t1 >> where w.lang_id=2 and w.flag=1 and w.word=t1.wrd >> group by 1 order by 2 desc ) idx >> where d.lang_id=2 and d.published_when>='01.07.2002' and >> d.published_when<='02.07.2007' and d.publisher_id =36149 and >> d.id=idx.document_id and idx.cnt=3 > Извините, что влезаю, Это публичная конференция, тут каждый сам решает - присоединяться к ветке или нет. :) > но никак не могу понять, зачем order by 2 desc в idx? "order by 2 desc" - сортировка по второму полю (количество ключевых слов, найденных в документе). Это общая конструкция - на нее может, а может и не, накладываться условие отсечения and cnt=3 (3 - это количество ключевых слов в данном случае). Грубо (абсолютно не точно) - это сортировка по "релевантности" - т.е. документы, в которых встречаются 3 из 3-х слов идут первыми, затем те, в которых 2 из 3 и т.д. У гугла понятие релевантности отличается - как и у яндекса. > Правильно ли я понимаю, что Ваш запрос эквивалентен следующему: > select count(1) from t_documents d, > (select w.document_id from t_search_words w, > ( select 2624961196 as wrd from rdb$database union > select 1902388292 as wrd from rdb$database union > select 1228066714 as wrd from rdb$database ) t1 > where w.lang_id=2 and w.flag=1 and w.word=t1.wrd > group by 1 > Having Count(1) = 3 ) idx > where d.lang_id = 2 > and d.published_when >= '01.07.2002' > and d.published_when <= '02.07.2007' > and d.publisher_id = 36149 > and d.id = idx.document_id ? Правильно. Но первый вариант мне почему-то нравится больше и order by 2 desc тут не смотрится :) > или, если взять за основу вариант Влада Хорсуна, > select count(1) from t_documents d, > (select w.document_id from t_search_words w cross join rdb$database > where w.lang_id=2 and w.flag=1 > and w.word in (2624961196, 1902388292, 1228066714) > group by 1 > having Count(1) = 3) idx > where d.lang_id=2 > and d.published_when>='01.07.2002' > and d.published_when<='02.07.2007' > and d.publisher_id =36149 > and d.id=idx.document_id ? Запрос с IN(), как я показал - в моем случае тормознутее :)) -- Best regards, Sergey mailto:[EMAIL PROTECTED]

