Mysql 按联接表中匹配实例的n_数量排序
我正在编写一个程序来查询我的数据库。我必须提供一对多表tbl\u用户服务和tbl\u用户竞争Mysql 按联接表中匹配实例的n_数量排序,mysql,sql,Mysql,Sql,我正在编写一个程序来查询我的数据库。我必须提供一对多表tbl\u用户服务和tbl\u用户竞争 Query_Data : Region : "Some_State" Services : 'Webdevelopment', 'Some Service' Competens : 'React JS', 'Native JS' tbl_users: fld_user_id : 1 Region : "Some_State" fld_user_id : 2 Region : "
Query_Data :
Region : "Some_State"
Services : 'Webdevelopment', 'Some Service'
Competens : 'React JS', 'Native JS'
tbl_users:
fld_user_id : 1 Region : "Some_State"
fld_user_id : 2 Region : "Some_State"
fld_user_id : 3 Region : "Some_State"
tbl_user_services :
fld_user_id : 1 service : 'Webdevelopment'
fld_user_id : 2 service : 'Webdevelopment'
fld_user_id : 3 service : 'Webdevelopment'
tbl_user_competens :
fld_user_id : 1 competens : 'React JS'
fld_user_id : 1 competens : 'Native JS'
fld_user_id : 2 competens :'React JS'
给定两个数组,它们被格式化成字符串,可以放入子句中的“word”和“word_2”等
我想查询所有用户的匹配服务和订单的数量匹配的竞争,他们有
到目前为止,我的查询如下所示
$sql = "SELECT DISTINCT tbl_users.* FROM tbl_users
INNER JOIN tbl_user_service
ON tbl_users.region = '$region'
AND tbl_user_service.fld_service IN ($services_in)
INNER JOIN tbl_user_competens
ORDER BY FIELD(tbl_user_competens, $competens_in)
";
返回给我的结果是正确的,我要寻找的是如何根据tbl_user_竞赛中给定用户id的匹配实例对它们进行排序
试驾和想要的结果
Query_Data :
Region : "Some_State"
Services : 'Webdevelopment', 'Some Service'
Competens : 'React JS', 'Native JS'
tbl_users:
fld_user_id : 1 Region : "Some_State"
fld_user_id : 2 Region : "Some_State"
fld_user_id : 3 Region : "Some_State"
tbl_user_services :
fld_user_id : 1 service : 'Webdevelopment'
fld_user_id : 2 service : 'Webdevelopment'
fld_user_id : 3 service : 'Webdevelopment'
tbl_user_competens :
fld_user_id : 1 competens : 'React JS'
fld_user_id : 1 competens : 'Native JS'
fld_user_id : 2 competens :'React JS'
结果应该是
用户1,因为2个匹配竞争
用户2,因为1匹配竞争
用户3因为0匹配竞争与其加入组件表,不如加入从该表派生的表,为每个用户id选择与组件列表匹配的组件数量。
另外,不要使用
distinct
和加入服务表,而是使用exists
和相关子查询。这将使您能够根据select子句中没有的列对结果进行排序
SELECT u.fld_user_id, Region
FROM tbl_users As u
INNER JOIN
(
SELECT fld_user_id, COUNT(*) As number_of_component
FROM tbl_user_competens
WHERE components IN($competens_in)
GROUP BY fld_user_id
) As uc
ON u.fld_user_id = uc.fld_user_id
WHERE EXISTS
(
SELECT 1
FROM tbl_user_services As s
WHERE s.fld_user_id = u.fld_user_id
AND service IN($services_in)
)
ORDER BY number_of_component
您能否发布一些示例数据以及您的预期结果是什么?您需要一个
计数
和一个分组依据
来实现这一点。您使用的是什么rdbms?表之间的连接是什么(我假设是userId列)?参见postThank you very Zohar的编辑,很容易理解,并根据需要解决了我的问题。今天的MWP很乐意帮忙:-)