首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从按creation_date和name排序的MySQL中选择标签,但去掉重复的名称?

如何从按creation_date和name排序的MySQL中选择标签,但去掉重复的名称?
EN

Stack Overflow用户
提问于 2013-06-07 23:42:11
回答 2查看 139关注 0票数 0

我使用的是MySQL和Laravel 3。

我有下表:

代码语言:javascript
复制
tags
  id         INT
  name       INT
  created_at TIMESTAMP

标记名称不是唯一的,并且标记通过数据透视表与另一个名为cases的表相关联。

我需要抓取最近创建的50个标签(按名称排序)。问题是我只想要一个命名标签的一个实例(例如,如果有两个标签叫做“有趣”,那么我只想返回最近的一个。

例如,假设这是my tags表:

代码语言:javascript
复制
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

我想按以下顺序返回标签:

代码语言:javascript
复制
funny(4)
sad(2)
grumpy (5)
angry(3)

注意只返回了一个“有趣”的标签(最新的那个)。

我试过了:

代码语言:javascript
复制
$tags = DB::table('tags')->order_by('created_at', 'desc')->group_by('name')->distinct()->take(50)->get();?>

但上面的代码返回以下内容:

代码语言:javascript
复制
sad (2)
grumpy (5)
funny (1)  <--- this is the earlier tag NOT the most recent one
angry (3)

不知道我到底做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 23:57:18

我不知道laravel,但看起来您是按名称分组的,而不是在created_at上使用聚合函数。

在纯SQL中,它将是

代码语言:javascript
复制
SELECT name, MAX(created_at) FROM yourTable GROUP BY name ORDER BY MAX(created_at) DESC

观看它在sqlfiddle中的实时工作

票数 0
EN

Stack Overflow用户

发布于 2013-06-08 00:07:55

代码语言:javascript
复制
DB::table('tags')->group_by('name')->order_by(DB::raw('MAX(created_at)'))->get(array('name', DB::raw(MAX('created_at'))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16987991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档