PHP:DESC的订单不会这样做吗?

时间:2010-09-15 11:03:29

标签: php mysql

我有这个:

$getWallCommentQuery2 = mysql_query("SELECT * FROM users_wallcomments WHERE wallID = '$displayWall[id]' ORDER BY date DESC LIMIT 2");

    while($show = mysql_fetch_array($getWallCommentQuery2)){
    echo $show["comment"] . " <br> ";
    }

现在,我的数据库:

INSERT INTO `users_wallcomments` VALUES (1, 401, 1, 2, '1284056799', 'test kommentar blabla1');
INSERT INTO `users_wallcomments` VALUES (2, 401, 1, 1, '1284540210', 'test test comment2');
INSERT INTO `users_wallcomments` VALUES (3, 401, 1, 1, '1284540225', 'nr3 kommentar');
INSERT INTO `users_wallcomments` VALUES (4, 401, 1, 1, '1284540237', 'nr4 kommentar');

第五个字段..(其中数字以1284开头..)是日期的unix时间戳。现在我想通过顶部的查询对此进行排序,限制为2;

它限制为两个,但是当我按照日期DESC进行ORDER时它没有正确排序..

我收到第3个(id)作为最后一个和第4个(id)吗?我希望最后有第4个(因为它有最新的日期戳,你也可以看到,它有37个,第三个有25个),但它仍然排在第3位。

有什么问题?

3 个答案:

答案 0 :(得分:4)

DESC更改为ASC

按降序排序的日期(DESC)将始终首先生成最新日期,最后生成最早日期。

如果按升序(ASC)对日期进行排序,您将首先获得id为3的条目,然后是id为4的条目。

<强>更新 如果你只想要在日期asc中排序的最后2行,那么试试这个:

SELECT * FROM 
    (SELECT * FROM users_wallcomments WHERE wallID = '$displayWall[id]' ORDER BY date DESC LIMIT 2) recentWallComments
ORDER BY date ASC

答案 1 :(得分:1)

SELECT * FROM (
    SELECT * FROM users_wallcomments WHERE wallID = '$displayWall[id]' ORDER BY date DESC LIMIT 2
) t1 
ORDER BY t1.date ASC

这应该可以解决问题。

答案 2 :(得分:0)

您可以执行以下操作:

SELECT * 
 FROM (
       SELECT *
         FROM users_wallcomments 
         WHERE wallID = '$displayWall[id]'
         ORDER BY date DESC LIMIT 2
      ) AS foo
ORDER BY date ASC