gpt4 book ai didi

mysql - 如何从 MySQL 中选择按创建日期和名称排序的标签,但删除重复的名称?

转载 作者:行者123 更新时间:2023-11-30 01:35:17 24 4
gpt4 key购买 nike

我正在使用 MySQL 和 Laravel 3。

我有下表:

tags
id INT
name INT
created_at TIMESTAMP

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

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

例如,假设这是我的标签表:

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)

不确定我在这里做错了什么......

最佳答案

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

在纯 SQL 中,它是

SELECT name, MAX(created_at) FROM yourTable GROUP BY name ORDER BY MAX(created_at) DESC

查看它在 sqlfiddle 中的实时运行情况

关于mysql - 如何从 MySQL 中选择按创建日期和名称排序的标签,但删除重复的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com