0

我有下表。

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 出现在第一个位置。在postid 中。我也通过按降序199对列进行排序来解决这个问题。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子句的同时获得相同的结果。是否可以?

4

1 回答 1

0

我想在删除 comments.tempid DESC 子句时获得相同的结果。是否可以?

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

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

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

有关的

于 2012-10-22T09:20:30.803 回答