我有这样一个名为“profile”的表
profile_id name state location
1 Alex Houston Park Lane
我有第二个表名为“tags”,像这样
tag_id profile_id tag_title
1 1 finance
2 1 accounting
3 1 audit
我有第三个表名为“信任管理”
tier_d profile _id min_price max_price fee
1 1 400 500 5
2 1 750 1200 12
3 2 900 1500 15
同一配置文件可能有多个层。
我的场景是,用户输入标签、状态和最低价格进行搜索,我必须在以下条件下进行搜索
如果用户输入的标签的配置文件是否以db为单位,则应首先匹配标签
然后匹配状态,无论用户输入的状态是否与任何具有该标记的概要文件匹配
如果以上两个条件都为真,那么检查是否有用户在trust\u admin\u aum表中输入min\u price的<=min\u aum\u price的配置文件
这样地
result : {
profile_id : 1,
name : alex,
state : Houston,
location : Park Lane,
tag_title : finance,
tags : finance,accounting
}
我试过这个问题
SELECT p.*, IFNULL(GROUP_CONCAT(t1.tag_title), '') AS tags FROM basicprofile AS p JOIN profile_tags AS t1 ON p.profile_id = t1.profile_id JOIN profile_tags AS t2 ON t1.profile_id = t2.profile_id INNER JOIN trust_admin_aum AS taum ON taum.profile_id = p.profile_id WHERE p.state LIKE '%Houston%' AND t2.tag_title LIKE '%finance%' AND taum.min_price <=800 GROUP BY p.profile_id
但是这个查询像这样返回了两次标签
result : {
profile_id : 1,
name : alex,
state : Houston,
location : Park Lane,
tag_title : finance,
tags : finance,accounting,auditing,finance,accounting,auditing
}
我怎样才能摆脱这个标签?
2条答案
按热度按时间aiqt4smr1#
基本上,选择所有与用户匹配的标记,然后再次将用户加入到标记中,以便获得具有指定标记的所有用户以及这些用户的所有标记的列表。
在下面的查询中,alias是id的匹配标记列表。别名b是匹配用户的列表。最后,别名c是用户b的所有标记的列表。
xxslljrj2#
你可以用
GROUP_CONCAT
要获取逗号分隔数组中的所有标记,可以将其拆分为对象中的数组。创建对象时,可以执行以下操作来创建标记数组: