union查询到laravel雄辩查询

cbjzeqam  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(399)

需要帮助将此查询转换为laravel雄辩的查询吗

  1. select `pin`.*,`pin_reviews`.`review`,( 3959 * acos( cos( radians('27.788870') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('72.978920') ) + sin( radians('27.788870') ) * sin( radians( lat ) ) ) ) AS distance,COUNT(`pin_reviews`.`pin_id`) as `totalUserRating`,SUM(`pin_reviews`.`rating`) / (COUNT(`pin_reviews`.rating * 5)) as `rating`,`ads`.`product_name`,`ads`.`id` as 'adId',`ads`.`notes`,`ads`.`add_status`,`ads`.`description` as 'adsDescription',`c`.`name` as 'catName',`c`.`id` as 'catId',`sc`.`id` as 'subcatId', `sc`.`name` as 'subName',`ssc`.`id` as 'SubsubId',`ssc`.`name` as 'subsubName' from (
  2. ( SELECT
  3. *
  4. FROM
  5. pin WHERE `subscription_plan` = 'Premium' LIMIT 2)
  6. UNION
  7. ( SELECT
  8. *
  9. FROM
  10. pin WHERE `subscription_plan` = 'Platinum' LIMIT 1)
  11. UNION
  12. (SELECT
  13. *
  14. FROM pin WHERE `subscription_plan` = 'Free' LIMIT 10)
  15. )
  16. AS pin
  17. left join `pin_reviews` on `pin_reviews`.`pin_id` = `pin`.`id` left
  18. join `ads` on `ads`.`pin_id` = `pin`.`id` left join `category` as `c`
  19. on `c`.`id` = `ads`.`category_id` left join `category` as `sc` on
  20. `sc`.`id` = `ads`.`sub_category_id` left join `category` as `ssc` on
  21. `ssc`.`id` = `ads`.`sub_sub_category` where `pin`.`status` = 1 group
  22. by
  23. `pin`.`id` having `distance` < 380 order by `distance` asc limit 15
hzbexzde

hzbexzde1#

拉威尔雄辩的支持 union() 在这种情况下,进行另一个查询,但在本例中,将所有查询放在一个 DB::selectRaw() https://laravel.com/docs/5.6/queries#unions
https://laravel.com/docs/5.6/queries#raw-表达式

c6ubokkw

c6ubokkw2#

  1. $pinData = Pin::select(
  2. DB::raw("`pin`.*,`pin_reviews`.`review`,( 3959 * acos( cos(
  3. radians('$lat') ) * cos( radians( lat ) ) * cos( radians( lng ) -
  4. radians('$lng') ) + sin( radians('$lat') ) * sin( radians( lat ) )
  5. ) )
  6. AS distance,COUNT(`pin_reviews`.`pin_id`) as
  7. `totalUserRating`,SUM(`pin_reviews`.`rating`) /
  8. (COUNT(`pin_reviews`.rating * 5)) as
  9. `rating`,`ads`.`product_name`,`ads`.`id` as
  10. 'adId',`ads`.`notes`,`ads`.`add_status`,`ads`.`description` as
  11. 'adsDescription',`c`.`name` as 'catName',`c`.`id` as 'catId',`sc`.`id`
  12. as 'subcatId', `sc`.`name` as 'subName',`ssc`.`id` as
  13. 'SubsubId',`ssc`.`name` as 'subsubName' " ));
  14. $pinData->LeftJoin('pin_reviews','pin_reviews.pin_id','=',
  15. 'pin.id');
  16. $pinData->LeftJoin('ads','ads.pin_id','=', 'pin.id');
  17. $pinData->LeftJoin('category as c','c.id','=', 'ads.category_id');
  18. $pinData->LeftJoin('category as sc','sc.id','=',
  19. 'ads.sub_category_id');
  20. $pinData->LeftJoin('category as ssc','ssc.id','=',
  21. 'ads.sub_sub_category');
  22. //$pinData->where('pin.status',1);
  23. $pinData->groupBy('pin.id');
  24. $pinData->Having('distance','<',1870);
  25. $qcon = '';
  26. // if search keyword
  27. if($search!='')
  28. {
  29. $qcon.= " AND (pin.pin_name LIKE '%".$search."%'";
  30. $qcon.= " OR pin.name_on_map LIKE '%".$search."%'";
  31. $qcon.= " OR pin.description LIKE '%".$search."%'";
  32. }
  33. if($adStatus!='')
  34. {
  35. $qcon.= " AND ads.add_status='". $adStatus."' ";
  36. }
  37. $pinData->whereRaw('( 1 '.$qcon.')');
  38. $pinData->OrderBy('distance');
  39. $pinData->limit($search_settings->pins_appear_limit);
  40. $pins = $pinData->get();
展开查看全部

相关问题