mysql - 按连接表中匹配实例的 n_ammounts 进行排序

标签 mysql sql

我正在编写一个程序来查询我的数据库。我必须 one_to_n 表 tbl_user_servicetbl_user_competens

给定两个数组,cheese 被格式化为可以放入 IN 子句 -> '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_competens 中给定 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

关于mysql - 按连接表中匹配实例的 n_ammounts 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702894/

相关文章:

mysql - 如何根据数据的值降序对数据进行排序

php - jquery AJAX实时获取新的mysql记录

mysql - 出现次数的总和

php - 使用 PHP 的多层应用程序?

sql - 创建一个新的多对多表

mysql - 规范化数据库 - 从一个到多个 - 搜索所有连接的数据集

mysql - 尾随求和查询

php - 数据库事务在 laravel 5.2 中不起作用?

SQL Server : usage of In vs Exists

sql - 在字符串列表中搜索 super 字符串 - POSTGRES