Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?
Posted
技术标签:
【中文标题】Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?【英文标题】:MySQL sub query in Laravel, how to join queries and add second query's result as a new column to first query? 【发布时间】:2017-02-09 02:31:19 【问题描述】:我有两张桌子:
- PRODUCTS (having: ID, NAME, PRICE)
- LIKES (having: ID, PRODID, NAME)
我想查询第一个表,同时在子查询中计算(并作为新列返回)产品的所有喜欢。如何组合以下查询?
$products = DB::table('PRODUCTS')
->get();
$likes = DB::table('LIKES')
->select(DB::raw('count(*) as total'))
->where('PRODID', '=', 'product id from first table')
->get();
如何使用 Laravel 查询来实现这一点? 谢谢!
【问题讨论】:
不要将其作为子查询,将 2 个表连接在一起,并根据产品表中的字段进行分组。 我试过了,但是 LIKES 表有多行具有相同的 PRODID,所以当我加入这两个行时,行将不匹配。该查询将在我的 PRODUCTS 表中创建重复行。 这就是你使用 group by 的原因。我可以给你sql中的解决方案,但是你需要翻译成laravel,因为我不知道。 谢谢,我试试这个方法。 【参考方案1】:不是您特别要求的答案,但作为替代方案,使用 Eloquent 将非常容易处理。
$products = Product::with('likes');
foreach ($products as $product)
echo 'Number of likes: '.$product->likes->count();
【讨论】:
【参考方案2】:使用带有 group by 子句的连接,而不是子查询。这样您就可以一次获得所有产品的计数,您不必逐个查询计数。 sql如下:
select p.id, p.name, p.price, count(l.id) as likecount
from products p
left join likes l on p.id=l.prodid
group by p.id, p.name, p.price
【讨论】:
【参考方案3】:这样试试
$likes = DB::table('LIKES')
->join('PRODUCTS', 'LIKES.PRODID', '=', 'PRODUCTS.id')
->select('LIKES.*')
->where('PRODUCTS.id', '=', 3)
->get();
$total_like = count($likes);
【讨论】:
以上是关于Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?