我的第一个问题,它有点复杂,所以请指导我了解你们都习惯的任何礼仪!是的,这里有点复杂,所以我将在进入代码之前先描述我想要什么。
MySQL 数据库,我有一个组织表、一个服务表和一个交叉引用组织与服务的表。我正在构建一个搜索功能,它将检索与任何选定服务匹配的组织,但将根据它们匹配的服务数量对它们进行排序,并列出这些服务是什么。
好的,代码的相关位是什么:
组织表(组织):
id: INT, AI
name: VARCHAR(150)
服务表(服务):
id: INT, AI
name: VARCHAR(150)
交叉引用表 ( xref_org_services ):
org_id: INT
service_id: INT
我可以获得与我搜索的任何服务相匹配的组织列表:
SELECT DISTINCT organisations.name AS org
FROM organisations
JOIN xref_org_services ON organisations.id=xref_org_services.org_id
WHERE xref_org_services.services_id IN (x, y, z)
ORDER BY org ASC
x, y, z
我选择的服务的 ID 在哪里。完成了,没问题。
现在我想返回每个组织匹配的服务数量,以及它们是什么。我试过了
SELECT organisations.name AS org, COUNT(xref_org_services.services_id) AS matched
但这给了我匹配的总行数,这不是我想要的。我在看一个嵌套的SELECT
地方来做计数吗?
最终,我的输出需要像这样:
Org_1 matched 4 services
- Serv_1
- Serv_3
- Serv_4
Org_2 matched 3 services
- Serv_1
- Serv_2
- Serv_4
Org_3 matched 1 service
- Serv_2
我有任何意义吗?让我在其中添加一些“数据”,然后看看我是否可以澄清一下。
组织:
id | name
-------------------------
1 | A1 Train
2 | Faux LLC
3 | Shakey Practice
服务:
id | name
-------------------------
1 | PTS
2 | Track safety
3 | Assessors
4 | Structural
5 | Signalling
外部参照组织服务:
org_id | services_id
-------------------------
1 | 1
1 | 2
1 | 4
2 | 1
2 | 4
3 | 5
所以,这意味着:
- A1 Train提供PTS、轨道安全和结构
- Faux LLC提供PTS和Structural
- Shakey Practice提供信号
如果我想检索所有提供 PTS、Track Safety 和 Structural 的组织,我希望输出内容大致如下:
A1 Train matched
- PTS
- Track Safety
- Structural
Faux LLC matched
- PTS
- Structural
我希望这是有道理的。指针,提示,完整的答案都欢迎。如果您需要澄清或更多信息,请告诉我。
谢谢