0

我正在尝试获取 3 个不同表格的内容。

表 A = 包含我们的用户列表,表 B = 返回与用户相关的合同,表 C = 返回与合同相关的公式详细信息。

为了使其正确,我使用以下多表请求:

SELECT * FROM rscm_students A, rscm_files B, rscm_formulas C
    WHERE B.dossier_status = 0
    AND A.student_agency = :agency
    AND B.file_student_id = A.id
    AND B.file_formula_id = C.id
    AND C.formula_place = 0
    GROUP BY A.student_uniqid
    ORDER BY B.file_date_create";

这就是整个该死的事情变得有点复杂的地方。它正在返回正确的数据,但这里每个表的主键都称为“id”。我不能在 php 中做一些 foreach。如果我有 1 个用户的 3 个合同,我不可能在同一个用户数组中重新组合每个合同。

我仍然不是 SQL 专家,这就是我使用 Phinx 来控制我的数据库的原因。这也是我的主键被命名为“id”的原因。

如果你有好主意,请告诉我!

4

1 回答 1

1

好的,我会根据它来回答。

首先,不要使用

select *

上面的选择非常适合在生产之前进行快速而肮脏的开发。但这会使事情变得一团糟,例如您与来自多个表(likeid和其他表)的公共列名的连接。

使用现代显式连接语法。不要使用旧的连接样式。所以使用joinand on

最后使用表别名,为id列或其他冲突创建唯一的输出列名,例如

A.id as aid, B.id as bid
于 2016-09-06T13:13:21.897 回答