2016-11-28 60 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

好吧,我解決了使用這個鏈接http://laravel.io/forum/12-23-2015-subquery-in-laravel-eloquent-or-query-builder這個問題,我建立相應的我的查詢,其中表1是不是在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();