重命名多 table MySQL SELECT 上的键
Renaming a Key on a multi-table MySQL SELECT
我正在尝试获取 3 个不同 table 的内容。
table A = 包含我们的用户列表,table B = 返回与用户相关的合同,table C = 是返回与合同相关的公式详细信息。
为了使其正确,我使用了以下多 table 请求:
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";
这就是整个该死的事情变得有点复杂的地方。它正在返回正确的数据,但是这里每个 table 的主键被称为 "id"。我不能在 php 中做一些 foreach。如果我在 1 个用户上获得 3 个合同,我不可能将每个合同重新组合到同一个用户数组中。
我仍然不是 SQL 方面的专家,这就是我使用 Phinx 来控制我的数据库的原因。这也是为什么我的主键被命名为 "id".
如果你有好的想法,请告诉我!
好的,我会做出回答的。
首先,不要使用
select *
上面的 select 适用于在生产前进行快速而肮脏的开发。但这会使事情变得一团糟,例如您与来自多个 tables(如 id
和其他)的公共列名的连接。
使用现代显式连接语法。不要使用旧的连接样式。所以使用 join
和 on
.
最后使用 table 别名,为 id
列或其他冲突创建唯一的输出列名称,例如
A.id as aid, B.id as bid
我正在尝试获取 3 个不同 table 的内容。
table A = 包含我们的用户列表,table B = 返回与用户相关的合同,table C = 是返回与合同相关的公式详细信息。
为了使其正确,我使用了以下多 table 请求:
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";
这就是整个该死的事情变得有点复杂的地方。它正在返回正确的数据,但是这里每个 table 的主键被称为 "id"。我不能在 php 中做一些 foreach。如果我在 1 个用户上获得 3 个合同,我不可能将每个合同重新组合到同一个用户数组中。
我仍然不是 SQL 方面的专家,这就是我使用 Phinx 来控制我的数据库的原因。这也是为什么我的主键被命名为 "id".
如果你有好的想法,请告诉我!
好的,我会做出回答的。
首先,不要使用
select *
上面的 select 适用于在生产前进行快速而肮脏的开发。但这会使事情变得一团糟,例如您与来自多个 tables(如 id
和其他)的公共列名的连接。
使用现代显式连接语法。不要使用旧的连接样式。所以使用 join
和 on
.
最后使用 table 别名,为 id
列或其他冲突创建唯一的输出列名称,例如
A.id as aid, B.id as bid