mysql 两个字段多个值匹配查询的问题?
php吧
全部回复
仅看楼主
level 1
有两个表,一个user表,一个order表,user表有个一标签字段tags,值是以逗号分割的标签id,order表也有个相同字段值也相同
需求是,当用户查看订单列表的时候,与此用户标签匹配的订单排在列表的最上方,不知道应该怎么写这个语句了,请高手帮忙?
(因为一个用户可以设置多个标签,一个订单也可以有多个标签,相当于两个字段都是多个值的情况下如何匹配,且还得排序)
2022年10月17日 05点10分 1
level 7
[挖鼻]
2022年10月17日 05点10分 2
level 16
设计问题,逗号分隔id只能用在不参与业务的功能上,要参与排序还这么搞不就把自己坑死了嘛[汗]
2022年10月17日 05点10分 3
那有什么好的设计方法吗?
2022年10月17日 05点10分
@贴吧用户_Qt34D5G 数据逻辑和程序逻辑分离,逗号分隔是要有程序参与才能生效的逻辑,查询的时候程序参与不进来,思路就要么把逗号分隔这程序逻辑改成数据逻辑,要么查询的时候不排序,排序由程序来做,订单的数据量用程序去排估计不能接受,那就把绑定关系做数据逻辑喽
2022年10月17日 06点10分
@贴吧用户_Qt34D5G 比如单建一张表单存标签和订单的绑定关系,方法不唯一,看成本和能力选就是了
2022年10月17日 06点10分
@SeaDrip_Poplar 明白你说的意思,但是最终这个需求就是一个用户有多个标签,订单表也有多个标签,用户点击订单列表的时候怎么去查询排序呢?想不出来方法了[汗]
2022年10月17日 07点10分
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分
1