按其中项目的下载次数排序类别

时间:2016-05-24 22:25:07

标签: mysql sql laravel eloquent

我有两张桌子:

| 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项)的下载次数最多。

谢谢!

2 个答案:

答案 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