2016-11-28 12 views
0

Laravel 4.2でサブクエリからデータを引き算し、必要な年齢のバンドでtable1を作成するサブクエリを作成しようとしていますが、それは正しくできません。Laravelのサブクエリー4.2

は、クエリはこれです:

$var1= DB::table('table1') 
      ->select(DB::raw("COUNT(*), CASE 
WHEN age >=0 AND age <=20 THEN '0-20' 
WHEN age >=21 AND age <=24 THEN '21-24' 
WHEN age >=25 AND age <=29 THEN '25-29' 
WHEN age >=30 AND age <=34 THEN '30-34' 
WHEN age >=35 AND age <=39 THEN '35-39' 
WHEN age >=40 AND age <=44 THEN '40-44' 
WHEN age >=45 AND age <=49 THEN '45-49' 
WHEN age >=50 AND age <=54 THEN '50-54' 
WHEN age >=55 AND age <=59 THEN '55-59' 
WHEN age >=60 AND age <=64 THEN '60-64' 
WHEN age >=65 THEN 65+ 
END AS age"), 
    function ($query){ 
    $query->select(DB::raw("(SELECT DATE_FORMAT(NOW(),'%Y') - DATE_FORMAT(birthday,'%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < 
    DATE_FORMAT(birthday, '00-%m-%d')) AS age FROM ... 
    ) AS table1")); 
      }) 
      ->groupBy('age') 
      ->get(); 

答えて

0

[OK]を、私は、このリンクhttp://laravel.io/forum/12-23-2015-subquery-in-laravel-eloquent-or-query-builderを使用してこの問題を解決し、TABLE1がDB内の実際のテーブルではなく、副問合せから作成された場合、私はそれに応じて私のクエリを構築します。コードは次のとおりです。

$ageband = DB::table('table1') 
      ->select(DB::raw("COUNT(*), 
      CASE 
      WHEN age >=0 AND age <=20 THEN '0-20' 
      WHEN age >=21 AND age <=24 THEN '21-24' 
      WHEN age >=25 AND age <=29 THEN '25-29' 
      WHEN age >=30 AND age <=34 THEN '30-34' 
      WHEN age >=35 AND age <=39 THEN '35-39' 
      WHEN age >=40 AND age <=44 THEN '40-44' 
      WHEN age >=45 AND age <=49 THEN '45-49' 
      WHEN age >=50 AND age <=54 THEN '50-54' 
      WHEN age >=55 AND age <=59 THEN '55-59' 
      WHEN age >=60 AND age <=64 THEN '60-64' 
      WHEN age >=65 THEN '65+' 
      END AS ageband")) 
      ->from(DB::raw("(SELECT DATE_FORMAT(NOW(),'%Y') - DATE_FORMAT(birthday,'%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < 
         DATE_FORMAT(birthday, '00-%m-%d')) AS age FROM health_clients 
     ) as table1")) 
      ->groupBy('ageband') 
      ->get();