2016-04-27 86 views
2

我的第一篇文章...mysql找到最新的每个ID

我有一个新闻故事表,其中用户标记故事,优先级1,2,3,4在网站主页上显示。

问题是,当他们添加故事时,旧版本会被推送到CMS中的第二页,第三页等。然后,他们会标记新的“1”,“2”等,而不清除旧的1,2等等 - 这些数据仍保留在数据中,以防万一新数字1被“降级”(删除该标志)或被删除。

我想要得到的是每个数字“1”,“2”,“3”和“4”中最新的newsid和标题。

我发现了一些类似的帖子,但它的标记字段(称为“xorder”)的重要性不是时间戳。在“newsStories”表中的相关字段下面:

newsid  int 
headline varchar(60) 
xorder  int (number or null) 
xtimestamp datetime - this is the publish date 

在这种情况下的xtimestamp场是他们想要的新闻报道出现(发布日期),而不是一个时间戳字段作为它的日期/时间重要,这将由MySQL更新。我们不想显示发布日期/时间大于当前系统时间戳的故事(允许故事被禁止)。我们在网页加载时生成查询,因此我们的条件读取的内容类似于:

where xorder IS NOT NULL 
AND xorder > 0 
AND xtimestamp <= 201604271800 (for 6pm today) 

(由于还有其他标准,这略有简化)。

我按xtimestamp desc和xorder asc进行排序,只是找到前4条记录,但是这并没有给出正确的xorder。

希望这是有道理的,任何帮助表示赞赏。

+0

所以你想从1 - 4订购xorder?只需添加ORDER BY xorder ASC – Matt

+0

[获得每组分组结果的前n条记录]的可能副本(http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of - 结果) – Shadow

+0

order by xorder ASC让我全部1,然后所有的2。我想要最近的1,然后是最近的2,然后是最近的3,然后是最近的4.By“最近的”,我的意思是xtimestamp字段。 –

回答

0

看看在select章关键字order bylimit您的SQL文件

0

答案是UNION ALL语句英寸对我来说,这是4个独立的select语句,每个语句都有一个极限1,并且它们之间都是union。它确实有效,但似乎有点笨重。