2012-02-24 65 views
9

什么是最好的,而要做到这一点最简单的方法是什么?我的查询目前是:从表MYSQL选择,得到表最新/过去的10行

SELECT * 
    FROM chat 
    WHERE (userID = $session AND toID = $friendID) 
     OR (userID = $friendID AND toID = $session) 
ORDER BY id 
    LIMIT 10 

这显示了前10行虽然不是最后的10

编辑:我想最后10行(这是,DESC做到这一点),但我希望他们能按照升序顺序退回。

+0

在数据库上使用** sort **选项。 – user631756 2012-02-24 02:01:12

回答

20

颠倒顺序(因此得到的最后10而不是前10),使用DESC代替ASC

编辑

基于您的评论:

SELECT * FROM (
    SELECT * 
    FROM chat 
    WHERE (userID = $session AND toID = $friendID) 
    OR (userID = $friendID AND toID = $session) 
    ORDER BY id DESC 
    LIMIT 10 
) AS `table` ORDER by id ASC 
+1

我忘了在我的问题中包含,我想要最后10行(是使用DESC),但是按顺序排列。 – 2012-02-24 02:05:18

+0

感谢作品很好 – 2012-02-24 02:11:53

+0

我知道这是一个旧帖子,但这正是我正在寻找的。谢谢:) – 2015-09-19 11:26:26

1

如果你想最后10个,然后将ASC更改为DESC

SELECT * 
FROM 
chat 
WHERE 
(userID=$session AND toID=$friendID) 
OR 
(userID=$friendID AND toID=$session) 
ORDER BY id 
DESC 
LIMIT 10 
+0

哎呀,我忘了我的问题,最近10(这是可以用DESC来完成,但是在ASC顺序。 – 2012-02-24 02:04:55

0
$limit = 10;     
$gt_query= "SELECT * FROM $table "; 
       $gt_res_query = mysql_query($gt_query,$this->gt_con_puneri) or die(mysql_error()); 
       $gt_total_rows = mysql_num_rows($gt_res_query); 
       $start = $gt_total_rows-$limit; 
       $gt_query_limit= $gt_query." LIMIT $start,$limit"; 

首先,我已经设置了限制

$limit = 10; 

受影响的行然后

$gt_total_rows = mysql_num_rows($gt_res_query); 

这里,我已经采取了总数。

$start = $gt_total_rows-$limit; 

然后中减去限制从行数取起始记录数

$gt_query_limit= $gt_query." LIMIT $start,$limit"; 

,然后加入限制到查询中。 有关限制的更多信息,请参阅此链接 https://www.w3schools.com/php/php_mysql_select_limit.asp

+0

代码转储没有任何解释都很少有帮助,包括请添加 – Chris 2014-11-05 01:13:54

+0

这可能是一个问题,如果你有一个过滤器,有些数据可能被忽略 – Asuquo12 2017-09-13 07:50:52

+0

@Chris是否可以......?我已经给答案加了一点解释 – mohitesachin217 2017-10-11 14:39:38