2011-07-08 52 views
4

我需要關於如何隨機化最後10行MySql記錄的幫助。MySql隨機化最後10行

$mysqld = mysql_query(select * from table where amount > amount2 and code = '$code' order by time DESC limit 1); 

從上面的語句,我需要隨機按時間排序,但僅限於1至顯示器的最後10行。

編輯:換句話說,我需要按時間排序表,然後我需要關注最後10行。從最後10行開始,我需要選擇一個,它必須是隨機的,我得到哪一個。

這可能嗎?

由於

+1

最後十行是什麼?您的查詢中有一個限制1,因此它只會返回一行。 – Flimzy

+1

如果你只想顯示1,那麼你爲什麼會隨機化最後10? – rrapuya

+1

他想要一個隨機行,但只從最後十行中選擇(按時間順序)。如果你不隨機化最後十行,那麼他每次都會得到同一行,這不是他想要的。 – calumbrodie

回答

7

假設time是當記錄被插入,這將讓你從表中最新的10行時間:

SELECT * FROM `table` WHERE `amount` > `amount2` AND `code` = '$code' 
    ORDER BY `time` DESC LIMIT 10 

現在,您可以使用結果作爲臨時表,排序它隨機(因爲它只有10行)並返回一行:

SELECT * FROM (
    SELECT * FROM `table` WHERE `amount` > `amount2` AND `code` = '$code' 
    ORDER BY `time` DESC LIMIT 10 
) AS temptable 
ORDER BY RAND() 
LIMIT 1 
+0

非常感謝你..它的工作 – miko

+0

@miko:不客氣。 – Piskvor

1

嘗試....

如果優選
SELECT * FROM (SELECT * FROM yerTable ORDER BY id DESC LIMIT 10) AS tmp ORDER BY RAND() LIMIT 1 

顯然與任何其它不同的列替換的ID。

+0

其中1)做了一些完全不同的事情(從表中的任何位置給出4行),2)效率非常低(爲表中的每一行運行'RAND()';打個招呼先生Filesort;)) – Piskvor

+0

這將無法正常工作 - 他希望從最後十行 – calumbrodie

+0

我敢肯定,他會很聰明,添加第二限制 – Brian