2014-11-01 76 views
0

注意:在使用Lravel 4.1框架排序依據聯合查詢中給予SQLSTATE [42601]錯誤

你好我的SQL查詢POSTGRES DB是

$results1 = DB::table('vehicle_brands') 
        ->where('vehicle_brands.caption','ilike', '%'.$_GET['key_word'].'%') 
        ->join('vehicle_manufacturers','vehicle_manufacturers.id', '=', 'vehicle_brands.vehicle_manufacturer_id') 
        ->select('vehicle_brands.*','vehicle_manufacturers.caption AS vm_caption'); 
        $results = DB::table('vehicle_brands') 
        ->where('vehicle_manufacturers.caption','ilike', '%'.$_GET['key_word'].'%') 
        ->join('vehicle_manufacturers','vehicle_manufacturers.id', '=', 'vehicle_brands.vehicle_manufacturer_id') 
        ->select('vehicle_brands.*','vehicle_manufacturers.caption AS vm_caption') 
        ->union($results1) 
        ->orderBy('vehicle_brands.caption','ASC') 
        ->get(); 
       return Response::json(array('status' => true,'data' => $results)); 

我得到的錯誤如下:

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "union" LINE 1: ... ilike $1 order by "vehicle_brands"."caption" asc union sele...^(SQL: select "vehicle_brands"., "vehicle_manufacturers"."caption" as "vm_caption" from "vehicle_brands" inner join "vehicle_manufacturers" on "vehicle_manufacturers"."id" = "vehicle_brands"."vehicle_manufacturer_id" where "vehicle_manufacturers"."caption" ilike %o% order by "vehicle_brands"."caption" asc union select "vehicle_brands"., "vehicle_manufacturers"."caption" as "vm_caption" from "vehicle_brands" inner join "vehicle_manufacturers" on "vehicle_manufacturers"."id" = "vehicle_brands"."vehicle_manufacturer_id" where "vehicle_brands"."caption" ilike %o%)

我在做什麼錯誤的查詢?

謝謝。

+3

請向我們展示生成的SQL。那是什麼編程語言?你使用哪個框架來生成SQL? – 2014-11-01 10:45:58

回答

0

我使用Laravel 4.1作爲框架,並將postgres用作數據庫。

我發表了上述問題後進一步研究,並提出了一個解決方案,我的問題如下。

這是一個bug討論可以在https://github.com/laravel/framework/pull/3901看到,討論也提供了一個解決方案。

發現一個#1溶液太(這是相同的清晰度以上但)

https://stackoverflow.com/a/25722206

我coverted我的代碼如下:

$query1 = DB::table('vehicle_brands') 
      ->where('vehicle_brands.caption','ilike', '%'.$term.'%') 
      ->join('vehicle_manufacturers','vehicle_manufacturers.id', '=', 'vehicle_brands.vehicle_manufacturer_id') 
      ->select('vehicle_brands.*','vehicle_manufacturers.caption AS vm_caption'); 
     $query2 = DB::table('vehicle_brands') 
      ->where('vehicle_manufacturers.caption','ilike', '%'.$term.'%') 
      ->join('vehicle_manufacturers','vehicle_manufacturers.id', '=', 'vehicle_brands.vehicle_manufacturer_id') 
      ->select('vehicle_brands.*','vehicle_manufacturers.caption AS vm_caption'); 
     $query = $query1->union($query2); 
$items = DB::table(DB::raw("($querySql order by 'caption' 'ASC') as a"))->mergeBindings($query) 
         ->take($limit) 
         ->skip($limit * ($page - 1)) 
         ->get(); 

$term是搜索關鍵字。

謝謝。