2016-09-06 57 views
0

我試圖獲取3個不同表的內容。在多表MySQL上重命名密鑰SELECT

表一個 =是包含我們的用戶列表,表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。如果我有一個用戶有3份合同,那麼我不可能重新組合同一用戶數組中的每份合同。

我仍然不是SQL專家,這就是爲什麼我使用Phinx來控制我的數據庫。這也是我的主鍵被命名爲「id」的原因。

如果你有一個好主意,請讓我知道!

+0

使用內部聯接---> http://dev.mysql.com/doc/refman創建唯一的輸出的列名/5.7/en/join.html –

+0

不要選擇*。使用表別名和每個別名,爲每個「id」創建一個新的別名 – Drew

+0

也可以使用顯式連接語法與通過from子句 – Drew

回答

1

好吧,我會做出回答。

首先,不使用

select * 

以上選擇是精細生產之前,快速和骯髒的發展。但是它會讓事情變得糟糕,比如你的連接與多個表中出現的常見列名(如id等)。

使用現代顯式連接語法。不要使用較舊的連接樣式。所以請使用joinon

與表別名

最後,對於id列或其他衝突如

A.id as aid, B.id as bid 
+0

'SELECT A. *,B. *,C. *,A.id AS student_id,B.id AS dossier_id,C.id AS formule_id' –

+0

它解決了我的問題問題,謝謝! –