我有两张桌子:
项
| id | name | downloads | category_id |
|----|--------|-----------|-------------|
| 1 | Item 1 | 5 | 1 |
| 2 | Item 2 | 7 | 1 |
| 3 | Item 3 | 23 | 2 |
分类
| id | name |
|----|------------|
| 1 | Somecategory |
| 2 | Someothercategory |
| 3 | Somecategory2 |
我目前正在使用基本查询:
$cats = Category::where('name', 'like', '%'.$query.'%')
->orderBy('parent', 'desc')
->orderBy('name', 'asc')
->take(10)
->get();
但我希望按照项目下载次数对类别进行排序。
因此,如果有人首先搜索“some”以返回Someothercategory
,那么因为其项目(第3项)的下载次数最多。
谢谢!
答案 0 :(得分:2)
这是一个加入表格的问题,按类别名称分组并在下载中使用总和。
使用SQL,可以使用以下方法解决:
SELECT c.name, SUM(downloads) AS downloads
FROM items i
INNER JOIN categories c ON i.category_id=c.id
WHERE c.name LIKE '%other%'
GROUP BY c.name
ORDER BY downloads DESC
下一步是使用Eloquent搜索如何实现这一目标,如果这是你想要的。
如果要简化操作,还可以在包含此代码的数据库上创建视图。有了这个,你只需要:
SELECT name, downloads
FROM viewCategoryDownloads
WHERE c.name LIKE '%other%'
ORDER BY downloads DESC
答案 1 :(得分:0)
查看COUNT()函数和column aliases。在laravel上下文中,您可以使用raw queries