also allgemein ist es nicht, da die genutzte Funktion oracle spezifisch ist und ich nicht weiß, wie weit das einem
ANSI Standard folgt.
SQL-Code:
select o.*, s.*
from (select id,
f_hits,
f_cat_id,
f_word,
f_status_id,
row_number() over(partition by f_cat_id order by f_hits) as TopOf
from (SELECT e.id, e.f_hits, e.f_cat_id, f_word, e.f_status_id
FROM tab_entries e
JOIN tab_search_index i
ON i.f_entry_id = e.id
WHERE i.f_word = 'Stadt' --'Fluss'
) i) o,
tab_entries_status s
where o.TopOf < 3
and s.id = o.f_status_id
order by o.f_cat_id, o.f_hits desc
Die Einschränkung (Suchwort) habe ich extra "innen" gemacht, was am schnellsten sein dürfte. Ist trotzdem aber mitgeschleift, wäre also view tauglich, die Einschränkung müsste dann aber außen erfolgen.
Restliche Felder kann man m.E. nach belieben außen weglassen oder anfügen /joinen.
Edit: Ich hab vergessen, dass mehrere Suchworte möglich sein sollen.
Wenn ID bzw. SuchwortFeld mitgeschleift werden, ist das natürlich möglich. Geht es um mehrere tausend Einträge, wäre wie gesagt die innere Einschränkung vorteilhaft. Das ginge nur über eine Prozedur/Funktion, wo zunächst das Suchwort gesetzt wird und in der Where Bedinungung dann abgefragt wird.