2015-06-16 174 views
0

我有一個表客戶端和表client_evolution,與OneToMany的關係。在client_evolution表我有3個條目爲當前客戶端。用左連接拉數據我總是得到第一個最小的ID從client_evolution,我需要的是最新的一行。我試圖做次選,但沒有奏效。學說左加入多對一

->addSelect('(
    SELECT ce.id 
    FROM ClientEvolution cev 
    WHERE cev.client = c.id 
    GROUP BY cev.client 
    ORDER BY cev.id DESC) AS cevol') 

我需要該表中的多個字段。 請任何幫助。

回答

0

GROUP BY就是爲什麼每個客戶端只能獲得一個條目,而您的SELECT缺少客戶端表。這將按照客戶端ID的順序爲您提供兩個表之間的所有字段。要獲得每個客戶端ID的最新行,請查看MySQL Group By to display latest result

->addSelect('(
    SELECT * 
    FROM ClientEvolution cev, Client c 
    WHERE cev.client = c.id 
    ORDER BY cev.client, cev.id DESC)') 
+0

您確定*是否被允許?我遇到了一個錯誤 [語法錯誤]第0行,第479行:錯誤:意外'*' –

+0

它在MySQL中是允許的,但可能不允許在doctrine中使用。只需將*替換爲你想用逗號分隔的列名,比如'SELECT cev.id,c.name,c.phone,cev.note,cev.date FROM' ... – dstudeba