请考虑以下项目表:
Project:
table: project
manyToMany:
themes:
targetEntity: Theme
inversedBy: projects
joinTable:
name: project_theme
joinColumns:
project_id:
referencedColumnName: id
inverseJoinColumns:
theme_id:
referencedColumnName: id
platforms:
targetEntity: Platform
joinTable:
name: project_platform
joinColumns:
project_id:
referencedColumnName: id
inverseJoinColumns:
platform_id:
referencedColumnName: id
manyToOne:
client:
targetEntity: Client
如您所见,一个项目具有三个关系;主题通过 project_theme 连接表,平台通过 project_platform 表,客户端通过 client_id 列。
我正在尝试生成一个查询,该查询将找到所有相关项目——具有相同主题、平台或客户的项目——并按“分数”对它们进行排序。
例如:
项目一: 主题:18、19 平台:1、4 客户:22
查找与项目 A.. 相关的项目
项目 D: 主题:18、19 平台:1、4 客户:22 得分:5
项目 G: 主题:18、21 平台:3、4 客户:22 得分:3
项目B: 主题:8、21 平台:2、4 客户:1 得分:1
我真的很感谢一些为此编写 MySQL 查询的助手。我一直在为以下问题苦苦挣扎-但我可能还很遥远:
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`
非常感谢
皮特的任何帮助