2012-02-24 83 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