level 1
有两个表,一个user表,一个order表,user表有个一标签字段tags,值是以逗号分割的标签id,order表也有个相同字段值也相同
需求是,当用户查看订单列表的时候,与此用户标签匹配的订单排在列表的最上方,不知道应该怎么写这个语句了,请高手帮忙?
(因为一个用户可以设置多个标签,一个订单也可以有多个标签,相当于两个字段都是多个值的情况下如何匹配,且还得排序)
2022年10月17日 05点10分
1
level 3
一般这种都是单独存中间表的,如果不能改了,可以考虑下麻烦的做法:比如先查用户的tag,然后再分别遍历查有这些标签的订单,当然需要去重,然后再查排除这些的订单,可以实现单不太推荐就是了
2022年10月18日 06点10分
4
那就得分别查了,一条sql语句实现不了是吗?
2022年10月18日 11点10分
@贴吧用户_Qt34D5G 没啥意义,就算写个大sql数据量多了后也会崩的,老实拆分或者写个存储过程吧
2022年10月19日 01点10分
level 5
表一:用户表
表二:标签表
表三:订单表
表四:用户标签表(用户id,标签id)
表五:订单标签表(订单id,标签id)
查询用户订单,且订单标签同用户标签一致的优先展示
第一步:查询出用户的所有标签id
第二步:查询订单,传入用户标签id列表
select
订单表.*,
sum(
case
when 订单标签表.id in (用户标签1, 用户标签2, ...) then 1
else 0
end
) as tag_sum
from 订单表 join 订单标签表
where 订单表.用户id = 用户id
group by 订单表.订单id
order by tag_sum desc
试试看,期望是订单标签与用户标签重合次数越高的优先展示。
2022年10月18日 16点10分
5
连表漏了 on 订单表.订单id = 订单标签表.订单id
2022年10月18日 16点10分