Mysql 如何代表第二个表中的同一id选择多行?
我有一个名为“profile”的表,如下所示Mysql 如何代表第二个表中的同一id选择多行?,mysql,node.js,join,Mysql,Node.js,Join,我有一个名为“profile”的表,如下所示 profile_id name state location 1 Alex Houston Park Lane result : { profile_id : 1, name : alex, state : Houston, location : Park Lane, tag_title : finance, tags : finance,accounting,audi
profile_id name state location
1 Alex Houston Park Lane
result : {
profile_id : 1,
name : alex,
state : Houston,
location : Park Lane,
tag_title : finance,
tags : finance,accounting,auditing,finance,accounting,auditing
}
第二个表名为“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
第三个表名为“trust\u admin\u aum”,如下所示
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,则标签应首先匹配
- 然后匹配状态,无论用户输入的状态是否与具有该标记的任何配置文件匹配
- 如果以上两个条件均为真,则检查是否存在基本上具有的配置文件,选择所有与用户匹配的标记,然后再次将用户加入到标记中
以获取具有指定标记的所有用户以及这些用户的所有标记的列表
在下面的查询中,别名是id的匹配标记列表。别名b是匹配用户的列表。
最后,别名c是用户b的所有标记的列表
您可以使用
获取逗号分隔数组中的所有标记,然后可以将其拆分为对象中的数组GROUP\u CONCAT
创建对象时,可以执行以下操作来创建标记数组: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 WHERE t2.tag_title LIKE '%finance%' GROUP BY p.profile_id
obj.tag_title = row.tags == "" : [] ? row.tags.split(",");
一个对象中不能有多个
属性,属性名称必须是不同的。因此,请告诉我如何使用与用户输入标记匹配的所有标记检索配置文件?它应该是一个数组:tag\u title:
那么我怎样才能这样检索呢?为什么说表的名称是tag\u title:[“财务”、“会计”、“审计”]
和profile
,但是在查询中使用tags
和basicprofile
?您希望每个profile都有一行吗,只有一列显示所有标签?@Sloarthasher看看他在问题中发布的所需对象。@Barmar:Aah!这是整个阅读的事情。。。LOL应该已经看到了。所以不是免费的编码服务。如果你是一名程序员,你应该能够从中推断出你需要什么。如果你不是程序员,你应该雇一个。我提到了我自己尝试过的查询,但我没有得到我需要的结果。那个这就是我在这里发帖的原因。如果你不想帮忙,那么没问题。在问题中发布你的查询。使用profile\u tags
去除重复的标记。GROUP\u CONCAT(DISTINCT t1.tag\u title)
obj.tag_title = row.tags == "" : [] ? row.tags.split(",");