boolean如果record是该月的前10个帖子

时间:2011-11-10 06:29:54

标签: mysql

我有一个非常棘手的mysql语句问题。

我有一张具有以下结构的表格。

post_id, date_time, category_id

我希望按date_time对此表格进行排序,并且还要有一个 true false 布尔值,指示此记录是否为该记录的前10条记录每个类别的月份。

例如,对于类别a,2011年10月的前10条记录将是真实的,2011年10月类别b的前10条记录也是如此,2011年11月类别c的前10条记录将是真实的,前10条记录为2011年11月的b类也是如此。

请指导我。谢谢!

2 个答案:

答案 0 :(得分:0)

您只需通过date_time desc从tablename oder应用select date_time查询 要么 您可以像在数组中获取所有data_time字段列数据。 并应用子字符串逻辑来获取唯一的日期编号。 您可以根据值对其进行排序 并再次附加剩余部分.. 喜欢 10-11-2011 15:30:46 取String date = substring(0,2) 所以你有10个 和字符串remainingDatepart =(3,长度) 按照日期排序后。 并且您可以在排序日期后附加reminingDatapart字符串。 这是你可以应用它们的逻辑。

答案 1 :(得分:0)

这样的事情应该可以解决问题,我只是在脑海中测试过它。

SELECT 
  s.*
  , CASE WHEN s.rank < 10 
         THEN TRUE
         ELSE FALSE
         END AS top10
FROM (
  SELECT
    t1.post_id, t1.date_time, t1.category_id
    ,CONCAT(year(t1.date_time), month(t1.date_time)) as yearmonth
    ,@prevyearmonth:= CONCAT(year(t1.date_time), month(t1.date_time)) as yearmonth
    ,CASE WHEN (@prevyearmonth = CONCAT(year(t1.date_time), month(t1.date_time))) 
          THEN @rank:= @rank + 1
          ELSE @rank:= 1
     END as rank
  FROM (SELECT * FROM table1 ORDER BY date_time DESC) t1
  CROSS JOIN (SELECT @rank:= 0, @prevyearmonth:= null)
  ORDER BY date_time DESC
  ) s
/* HAVING top10 = TRUE */
ORDER BY s.date_time, s.top10