按降序对一列进行排序,并按插入顺序检索其他列。 MYSQL

时间:2012-10-22 09:18:24

标签: mysql

我有下表。

comment    postid    userid            tempid

c1         199       100003052455644    89
c2         193       100003052455644    2
c4         199       100003052455644    82
c5         198       100003052455644    5
c6         199       1097517748         65

现在我想以这样的方式检索数据,即数据首先按照postid列的降序排序,然后按照插入行的顺序排序。现在我检索其中的值postid按降序排序,它给我这样的结果。

comment    postid    userid            tempid

c6         199       1097517748         65
c4         199       100003052455644    69
c1         199       100003052455644    82
c5         198       100003052455644    5
c2         193       100003052455644    2

正如您所看到的,评论最后一个的用户ID出现在第一个位置。在199 postid.I通过按降序排序tempid列来解决此问题。但是有一种方法,我不使用tempid列,因为这个表将很快填充,自动增量列将很快填写,所以我将来删除这个tempid列。所以我认为这不是一个好主意像这样做有没有其他解决方案呢?

现在我正在使用以下查询,它给出了正确的结果。

 SELECT comments.comment,comments.postid,user.name,comments.userid,comments.tempid 
 FROM
  user
   INNER JOIN comments ON user.userid=comments.userid
   INNER JOIN posts ON posts.postID = comments.postid
 WHERE 
 comments.postid <=  
 (SELECT MAX(postid) FROM
   (
     SELECT wall.postid FROM wall,posts WHERE  
     wall.postid = posts.postid AND posts.userid=?
     ORDER BY wall.postid DESC LIMIT 10 OFFSET ?
   )sq1
 )

 AND
 comments.postid >= 
 (SELECT MIN(postid) FROM
  (
    SELECT wall.postid FROM wall,posts WHERE
    wall.postid = posts.postid AND posts.userid=?
    ORDER BY wall.postid DESC LIMIT 10 OFFSET ?
  )sq2
 ) 

 AND
 posts.userid = ? 
 ORDER BY comments.postid DESC,comments.tempid DESC;

我们只关注最后一行。我想在删除comments.tempid DESC子句时获得相同的结果。可能吗?

1 个答案:

答案 0 :(得分:0)

  

我想在删除comments.tempid DESC子句时获得相同的结果。有可能吗?

是。您可以使用时间戳而不是整数添加另一列。但是两行可能具有相同的时间戳,因此它不是一个完美的解决方案。

  

但有没有一种方法我不使用tempid列,因为这个表会很快填充,自动增量列会很快填充,所以我将来会删除这个tempid列。所以我认为它这样做是不是一个好主意,这有什么其他解决方案吗?

自动增量列可以是bigint类型。这对你来说已经足够了。

相关