说我想选择包含特定标签或与关键字匹配的帖子。
select t1.*
from (
select p.*, count(p.id) from plainto_tsquery('hElLo') AS q , post p
left join post_tag pt on pt.post_id = p.id
left join tag t on t.id = pt.tag_id
WHERE (tsv @@ q) or t.id in (2,3)
group by p.id
) as t1
order by count desc, ts_rank_cd(t1.tsv, plainto_tsquery('hElLo')) desc
limit 5;
以上确实选择了我想要的东西。在tsv
中,我给了title
一个体重和description
D重量。当按count
排序时,它现在变得毫无意义,因为每个条目具有相同的权重。是否可以执行以下操作:如果从t.id in (2,3)
选择此行,则将它们排序到第一行,然后按ts_rank_cd
排序,或者给每个匹配标记'A'重量,标题变为B重量和描述是D?
答案 0 :(得分:1)
尝试CASE WHEN
name
已编辑(正确答案):
bsi.production.order
答案 1 :(得分:0)
我不确定为什么计数会相同,但您可以为order by
添加更多密钥:
order by count desc,
(t.id in (2, 3)) desc,
ts_rank_cd(t1.tsv, plainto_tsquery('hElLo')) desc ;
desc
是因为true>是的,你希望真正的价值是第一位的。