当前位置: 首页 > 面试题库 >

MySQL:我每天需要从每个用户的1个帖子到最多n个帖子显示

卓胜
2023-03-14
问题内容

我有一张桌子上有用户帖子。我需要显示每天每位用户从1到最多n条帖子。

例子:

post_id|user_id|post_datetime|post_text
1      |100    |2012-12-01 01:00:00|lorem ipsum 1
2      |100    |2012-12-01 02:00:00|lorem ipsum 2
3      |101    |2012-12-01 03:00:00|lorem ipsum 3
4      |100    |2012-12-01 04:00:00|lorem ipsum 4
5      |102    |2012-12-01 05:00:00|lorem ipsum 5
6      |100    |2012-12-02 03:00:00|lorem ipsum 6
7      |102    |2012-12-02 04:00:00|lorem ipsum 7
8      |101    |2012-12-02 05:00:00|lorem ipsum 8
9      |101    |2012-12-02 06:00:00|lorem ipsum 9
10     |101    |2012-12-02 07:00:00|lorem ipsum 10

我需要一个查询,例如返回每个用户每天最多2条帖子的查询:

post_id|user_id|post_datetime|post_text
2      |100    |2012-12-01 02:00:00|lorem ipsum 2
4      |100    |2012-12-01 04:00:00|lorem ipsum 4
3      |101    |2012-12-01 03:00:00|lorem ipsum 3
5      |102    |2012-12-01 05:00:00|lorem ipsum 5
6      |100    |2012-12-02 03:00:00|lorem ipsum 6
7      |102    |2012-12-02 04:00:00|lorem ipsum 7
9      |101    |2012-12-02 06:00:00|lorem ipsum 9
10     |101    |2012-12-02 07:00:00|lorem ipsum 10

我尝试使用GROUP和HAVING,但是我仅获得前n个记录,而不是每个用户每天的前n个记录:

SELECT a.* FROM posts AS a
   JOIN posts AS a2 
   ON a.user_id = a2.user_id AND a.post_datetime <= a2.post_datetime
GROUP BY a.post_id
HAVING COUNT(*) <= 3
ORDER BY a.post_id, a.post_datetime DESC

问题答案:

试试这个糟糕的SQL代码:)

select post_id, user_id, post_datetime, post_text from (
  select posts.*,
    if (user_id = @prev_user and date(post_datetime) = date(@prev_day),
      @row := @row + 1, @row := 1) idx,
    @prev_user := user_id,
    @prev_day := post_datetime
  from posts, (select @row := 1, @prev_user := null, @prev_day := null) init
  order by date(post_datetime), user_id, post_datetime desc
) s
where s.idx <= 2

结果:

+---------+---------+---------------------------------+----------------+
| POST_ID | USER_ID |          POST_DATETIME          |   POST_TEXT    |
+---------+---------+---------------------------------+----------------+
|       4 |     100 | December, 01 2012 04:00:00+0000 | lorem ipsum 4  |
|       2 |     100 | December, 01 2012 02:00:00+0000 | lorem ipsum 2  |
|       3 |     101 | December, 01 2012 03:00:00+0000 | lorem ipsum 3  |
|       5 |     102 | December, 01 2012 05:00:00+0000 | lorem ipsum 5  |
|       6 |     100 | December, 02 2012 03:00:00+0000 | lorem ipsum 6  |
|      10 |     101 | December, 02 2012 07:00:00+0000 | lorem ipsum 10 |
|       9 |     101 | December, 02 2012 06:00:00+0000 | lorem ipsum 9  |
|       7 |     102 | December, 02 2012 04:00:00+0000 | lorem ipsum 7  |
+---------+---------+---------------------------------+----------------+

在这里摆弄。

我认为如果按日期降序排序会更合适,因为实际上是最接近当前日期的前2位。



 类似资料:
  • 问题内容: 我有一个包含以下两个表的数据库, USERS,POSTS 我正在寻找一种方法来获取用户拥有的帖子数。 我尝试了以下SQL命令的许多变体,但均未成功。与其显示单个用户的帖子数,不如显示一行包含所有帖子的数。 最后我想要这样的东西 问题答案: 弄清楚了。

  • 问题内容: 我知道这个问题已被问过多次(但是,我仍然找不到解决方案): PHP MYSQL显示带评论的帖子 mysql查询-博客文章和评论有限制 mysql结构的帖子和评论 … 基本问题:拥有表 posts , comments , user …可以用一个选择语句选择并显示所有帖子和所有注释(带有comment.user,comment.text,comment.timestamp)吗?这样的选择

  • 问题内容: 可以说我有2个表:blog_posts和类别。每个博客帖子仅属于一个类别,因此此处的两个表之间基本上有一个外键。 我想从每个类别中检索2个最新的帖子,是否可以在单个请求中实现?GROUP BY会将所有内容分组,而在每个类别中只剩下一行。但我要其中两个。 执行1 + N查询(N =类别数)会很容易。首先检索类别。然后从每个类别检索2个帖子。 我相信执行M个查询(M =我希望从每个类别获得

  • 问题内容: 一个has_many 。我想检索每天的最新帖子(使用),而忽略其他可能早些写的帖子。提出此问题的另一种方法可能是按部门要求每个最高薪水收入的雇员- 我认为也是一样。 如何在Rails(最好是4.0)中编写此查询?我认为这与它有关,但我似乎无法理解。有没有办法不用SQL来做到这一点? 为了明确起见,我想返回的是一系列post对象,它们是在各自日期上最后写入的对象。 谢谢! 问题答案: 它

  • 我目前正在尝试使用Simplepie将多个提要显示为单个提要。我有饲料在一个数组和显示罚款: 这显示: 我的问题是如何在数组中循环并仅访问每个提要中最近的文章/文章,以便每个提要中只有第一篇文章/文章显示如下: 我想完成的最隐秘的事情可能是这个答案: SimplePie多个进纸随机顺序 但我不希望它是随机的。我的感觉是,排序项目是这样做的,但我需要一些方向。 任何帮助都很感激。 谢谢你抽出时间。

  • 下面是我的GridView的源代码: