【问题标题】:Laravel select db raw groupByLaravel 选择数据库原始组
【发布时间】:2018-07-31 01:15:56
【问题描述】:

我想在 laravel 中显示这个查询:

SELECT products.*, (

SELECT COUNT(*)
FROM category
WHERE category.product_id = products.id
AND category.date_creation BETWEEN '2018-02-16 00:00:00' AND '2018-02-19 23:59:59' 
GROUP BY product_id
)nbr
FROM products 

我试试这个:

    $a= $date_du;
    $b = $date_au;
    $products = DB::table('products')                                    
    ->leftjoin('category','category.product_id','=','products.id')
    ->select('products.*',
       DB::raw("(SELECT COUNT(*)  FROM category 
       WHERE category.product_id = products.id AND category.date_creation >= '$a' AND category.date_creation <= '$b' group by product_id) as nbr"))                                     
    ->get();

但是子句 group by 不起作用。

【问题讨论】:

  • 你为什么不使用 Rships?
  • 您提供的sql查询是否正常工作?
  • 我已经添加了我的答案。试试。如果您更详细地提供您的问题,那么给出更好的答案会很容易。
  • @SagarGautam,你的回答效果很好
  • 我感觉很好,它帮助了你。恭喜:D

标签: php mysql laravel laravel-query-builder


【解决方案1】:

你也可以这样做:

$products=DB::select("SELECT products.*, ( SELECT COUNT(*) FROM category WHERE category.product_id = products.id AND category.date_creation BETWEEN '2018-02-16 00:00:00' AND '2018-02-19 23:59:59' GROUP BY product_id )nbr FROM products" );

这将运行原始查询并返回所需的输出。

【讨论】:

    【解决方案2】:

    试试这个,

    $products = DB::table('products')
                ->leftjoin('category','category.product_id','=','products.id')
                ->whereBetween('date_creation',[$a,$b])
                ->select(DB::raw('COUNT(*) as nbr'), 'products.*')
                ->groupBy('id')
                ->get();
    

    这可能对你有用。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2016-04-17
      • 2021-10-29
      • 2013-08-15
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多