【发布时间】:2009-03-25 18:29:07
【问题描述】:
我有一个名为 items 的 MySQL 表,其中包含数千条记录。每条记录都有一个user_id 字段和一个created(日期时间)字段。
尝试对SELECT 25 行进行查询,将用户ID 字符串作为条件传递并按created DESC 排序。
在某些情况下,可能只有几个用户 ID,而在其他情况下,可能有数百个。
如果结果集大于 25,我想通过消除重复的 user_id 记录来减少它。例如,如果user_id = 3 有两条记录,则只会包括最近的(根据created 日期时间)。
在我尝试解决方案时,我遇到了麻烦,因为例如,很容易获得 100 个结果集(允许重复的 user_id 记录)或 16 个结果集(使用 GROUP BY唯一的user_id 记录),很难获得 25 个。
一种逻辑方法(可能不是正确的 MySQL 方法)是为每个 user_id 获取最近的记录,然后,如果结果集小于 25,则开始为每个添加第二条记录user_id 直到达到 25 条记录限制(可能需要为每个 user_id 提供第三条、第四条等记录)。
这可以通过 MySQL 查询来完成,还是我需要获取一个大型结果集并使用代码将其缩减到 25 个?
【问题讨论】:
-
删除重复项的要求是什么。假设您的记录集为 35(带有 dups),但删除 dups 会导致 23。为了获得 25 条记录,哪些 id 将被允许复制?
-
最近创建的记录,与 user_id 无关。