2017-03-12 67 views
0
1. MySQL :  

     SELECT a.*,COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

       FROM manifests a 
       JOIN truck_entry_regs b ON a.id = b.manf_id 

        LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

       WHERE a.manifest='550/7' 
       GROUP BY a.id 


2.Laravel 5.4 
    $results = DB::select('SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

    FROM manifests a 
    JOIN truck_entry_regs b ON a.id = b.manf_id 

     LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

    WHERE a.manifest=? 
    GROUP BY a.id', ['550/7']) 

我有相同的查詢。 第一個查詢在MySQL(Sqlyog)上運行良好。但是,如果我在我的laravel運行(第二查詢),其5.4的應用程序,它說:Laravel 5.4 Raw未按預期工作,但在mySQL中工作

QueryException in Connection.php line 647: 
SQLSTATE[42000]: Syntax error or access violation: 1055 'dbblpa.a.port_id' isn't in GROUP BY (SQL: SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

FROM manifests a 
JOIN truck_entry_regs b ON a.id = b.manf_id 

LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

WHERE a.manifest=550/7 
GROUP BY a.id) 

如何從一個表續加入後返回來自其他表中的所有數據? 如果我在select中添加a.id,a.name(如選擇a​​.id,a.name,COUNT(DISTINCT b.id))並在GROUP BY中添加a.id和a.name,那麼它就可以工作。 這個問題,如果我從表中返回所有列與計數,我應該添加組中的所有列?我知道這很奇怪! 那麼我怎樣才能讓我的預期結果laravel 5.4查詢生成器?

+0

是否顯示.id是主鍵?或者至少是獨特的?主要關鍵是 –

+0

。但我並沒有明確地使用truck_deliverys或truck_entry_regs製作外鍵。 – Fawel

+0

FK對此問題無關緊要。 –

回答

2

Laravel 5.3和5.4默認使用嚴格模式。這意味着ONLY_FULL_GROUP_BY SQL模式也被啓用。但是,如果您的MySQL版本至少爲5.7.5,您可以按表的主鍵進行分組,並使用SELECT子句中該表的所有列,因爲它們在功能上依賴於PK。

MySQL 5.7.5及更高版本實現檢測功能依賴性。如果 ONLY_FULL_GROUP_BY SQL模式已啓用(默認情況下爲此模式), MySQL將拒絕查詢,其中選擇列表,HAVING條件或 ORDER BY列表引用未在 GROUP BY子句中命名的非聚合列,也不在功能上依賴於它們。 (之前 5.7.5,MySQL不會檢測功能依賴和ONLY_FULL_GROUP_BY是不是默認啓用

MySQL Handling of GROUP BY

的選項有:

MySQL升級到至少5.7.5

或者在laravels分貝配置(config/database.php

// .. 
'connections' => [ 
    // .. 
    'mysql' => [ 
     // .. 
     'strict' => false, 
     // .. 
    ], 
    // .. 
] 
0禁用嚴格模式

更新

壞消息MariaDB的(和XAMPP)用戶:MariaDB的好像不支持 「功能的依賴檢測」(還)。我只能找到這個ticket

+0

我正在使用 - MySql'5.1.58-community'(SELECT VERSION的結果())。有用 。我改變了'strict'=> false, – Fawel