【问题标题】:Sort one column in descending order and retrieve other column in the order it was inserted. MYSQL按降序对一列进行排序,并按插入顺序检索另一列。 MYSQL
【发布时间】:2012-10-22 09:18:23
【问题描述】:

我有下表。

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。我也通过按降序对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 子句的同时获得相同的结果。是否可以?

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    是的。您可以添加另一个带有时间戳而不是整数的列。但是有可能两行会有相同的时间戳,所以这不是一个完美的解决方案。

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

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

    相关

    【讨论】:

    • 好的,但是有没有办法像我需要的那样克服这个问题??
    • @Mj1992:在您的自动增量列上使用 bigint 而不是 int。这将解决您的问题,因为它不会很快填充。在您的软件的生命周期中,它不太可能得到充分利用。
    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2018-10-23
    相关资源
    最近更新 更多