我使用的是MySQL和Laravel 3。
我有下表:
tags
id INT
name INT
created_at TIMESTAMP标记名称不是唯一的,并且标记通过数据透视表与另一个名为cases的表相关联。
我需要抓取最近创建的50个标签(按名称排序)。问题是我只想要一个命名标签的一个实例(例如,如果有两个标签叫做“有趣”,那么我只想返回最近的一个。
例如,假设这是my tags表:
id name created_at
1 funny 2013-4-10
2 sad 2013-6-5
3 angry 2013-1-3
4 funny 2013-6-7
5 grumpy 2013-5-20我想按以下顺序返回标签:
funny(4)
sad(2)
grumpy (5)
angry(3)注意只返回了一个“有趣”的标签(最新的那个)。
我试过了:
$tags = DB::table('tags')->order_by('created_at', 'desc')->group_by('name')->distinct()->take(50)->get();?>但上面的代码返回以下内容:
sad (2)
grumpy (5)
funny (1) <--- this is the earlier tag NOT the most recent one
angry (3)不知道我到底做错了什么。
发布于 2013-06-07 23:57:18
我不知道laravel,但看起来您是按名称分组的,而不是在created_at上使用聚合函数。
在纯SQL中,它将是
SELECT name, MAX(created_at) FROM yourTable GROUP BY name ORDER BY MAX(created_at) DESC观看它在sqlfiddle中的实时工作
发布于 2013-06-08 00:07:55
DB::table('tags')->group_by('name')->order_by(DB::raw('MAX(created_at)'))->get(array('name', DB::raw(MAX('created_at'))))https://stackoverflow.com/questions/16987991
复制相似问题