Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL相关';项目';查询 请考虑以下项目表:_Mysql_Sql - Fatal编程技术网

MySQL相关';项目';查询 请考虑以下项目表:

MySQL相关';项目';查询 请考虑以下项目表:,mysql,sql,Mysql,Sql,非常感谢您的帮助 皮特我正在用平板电脑,所以我会简短地说。将它们视为三个独立的查询,并将它们合并。当我有了键盘后,我会带着sql回来。谢谢你的提示,Marlin,在阅读和一些实验之后,我想我可能已经破解了它 SELECT p.*, ( IFNULL(themes.matches, 0) + IFNULL(platforms.matches, 0) + IFNULL(clients.matches, 0) ) as score FROM `project`

非常感谢您的帮助

皮特

我正在用平板电脑,所以我会简短地说。将它们视为三个独立的查询,并将它们合并。当我有了键盘后,我会带着sql回来。

谢谢你的提示,Marlin,在阅读和一些实验之后,我想我可能已经破解了它

SELECT 
    p.*,
    (
        IFNULL(themes.matches, 0) + IFNULL(platforms.matches, 0) + IFNULL(clients.matches, 0)
    ) as score
FROM `project` p
LEFT JOIN (
    SELECT t2.project_id, COUNT(*) as matches FROM `project_theme` t1, `project_theme` t2
    WHERE 
      t1.theme_id = t2.theme_id AND t1.project_id = 1
      GROUP BY t2.project_id
) themes ON p.id = themes.project_id
LEFT JOIN (
    SELECT f2.project_id, COUNT(*) as matches FROM `project_platform` f1, `project_platform` f2
    WHERE 
      f1.platform_id = f2.platform_id AND f1.project_id = 1
      GROUP BY f2.project_id
) platforms ON p.id = platforms.project_id
LEFT JOIN (
    SELECT p2.id, COUNT(*) as matches FROM `project` p1, `project` p2
    WHERE 
      p1.client_id = p2.client_id AND p1.id = 1
      GROUP BY p2.id
) clients ON p.id = clients.id
GROUP BY p.`id`
HAVING score > 0
ORDER BY score DESC;
Project A: Themes: 18, 19 Platforms: 1, 4 Client: 22 Project D: Themes: 18, 19 Platforms: 1, 4 Client: 22 Score: 5 Project G: Themes: 18, 21 Platforms: 3, 4 Client: 22 Score: 3 Project B: Themes: 8, 21 Platforms: 2, 4 Client: 1 Score: 1
SELECT 
    `project`.*,
    GROUP_CONCAT(`project_theme`.`theme_id`) as themes,
    GROUP_CONCAT(`project_platform`.`platform_id`) as platforms,
    `project`.`client_id` as client
FROM `project`
LEFT JOIN `project_theme` ON `project`.`id` = `project_theme`.`project_id`
LEFT JOIN `project_platform` ON `project`.`id` = `project_platform`.`project_id`
GROUP BY `project`.`id`
SELECT 
    p.*,
    (
        IFNULL(themes.matches, 0) + IFNULL(platforms.matches, 0) + IFNULL(clients.matches, 0)
    ) as score
FROM `project` p
LEFT JOIN (
    SELECT t2.project_id, COUNT(*) as matches FROM `project_theme` t1, `project_theme` t2
    WHERE 
      t1.theme_id = t2.theme_id AND t1.project_id = 1
      GROUP BY t2.project_id
) themes ON p.id = themes.project_id
LEFT JOIN (
    SELECT f2.project_id, COUNT(*) as matches FROM `project_platform` f1, `project_platform` f2
    WHERE 
      f1.platform_id = f2.platform_id AND f1.project_id = 1
      GROUP BY f2.project_id
) platforms ON p.id = platforms.project_id
LEFT JOIN (
    SELECT p2.id, COUNT(*) as matches FROM `project` p1, `project` p2
    WHERE 
      p1.client_id = p2.client_id AND p1.id = 1
      GROUP BY p2.id
) clients ON p.id = clients.id
GROUP BY p.`id`
HAVING score > 0
ORDER BY score DESC;