2013-09-16 32 views
1

如何獲得SELECT結果排序行ID如果表沒有自動增加列/鍵?在mySQL中按「row id」排序獲得SELECT結果

另外,如果我不能使用ORDER BY子句,我怎麼能得到它們的最後100個,因爲沒有自動增量行?

+0

的http://計算器。 com/questions/12707646/need-a-sequence-number-for-every-row-in-mysql-query – Mihai

+1

該表是否有「ID」列?如果是這樣 - 你是否每次插入都手動更新它?如果是的話 - 使用它,如果不是的話 - 你怎樣才能'訂購'不存在的東西?我有一種感覺,你的問題對我來說並不清楚...... – alfasin

+0

你可以提供當前的表結構,和/或指出如何計算row-id? – hjpotter92

回答

0

這一個(見下文)的作品,但它是有點慢......

SET @last = 100; 
SET @ofst = (SELECT COUNT(*) FROM table) - @last; 
SET @stmt = CONCAT('SELECT * FROM table LIMIT ', @ofst, ', ', @last); 
PREPARE stmt FROM @stmt; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
1

你可以試試下面的辦法,雖然我不會放棄任何保證可言,它會工作像你想:

SET @rownum:=0; 

SELECT * 
FROM (SELECT @rownum:[email protected]+1 as rownum, 
      * 
     FROM yourTable) t1 
ORDER BY rownum DESC 
LIMIT 100; 

我必須提到的是,如果你沒有在你的表中一個唯一的ID,排序將永遠是一個痛處的問題。你永遠無法知道事物的顯示順序。 (換句話說:這是不可靠的!)

1

在關係數據庫中沒有排序順序或第一行或最後一行。如果您想要訂購特定訂單,則必須在ORDER BY條款中指定一列。對於一個簡單的SELECT whatever FROM yourTable,您可能會得到相同的結果500次,但是當重建索引或僅增加更多行時,該行爲可能會迅速發生變化。

0

如果沒有查看要查詢的表格模式和示例查詢,很難回答您的問題。特別是,很難想象如果沒有指定排序順序,「最後500」是什麼意思。因爲無論如何不能保證一致,爲什麼你會關心「最後」100而不是「第一」100?

1)您可以使用增量變量(例如Marty McVry建議的(或select increment counter in mysqlNeed a sequence number for every row in MySQL query等))向查詢添加行號。

2)如果你想保持當前自然順序,我建議增加自動增加「ID」列表中,使用遞增變量像上述更新行,並設置AUTOINCREMENT。那麼你將可以在這個專欄中一直訂購。 3)最後,作爲一個噱頭,我嘗試使用增量變量獲得「最後100個」而不使用,但是如果沒有存儲過程,它是不可能的。無論是這些類型的查詢之一工作:

SELECT * FROM t LIMIT count(*)-100,100; 

SELECT @n := count(*) FROM t; 
SELECT * FROM t LIMIT @n-100, 100; 
1

select * from <table_name> order by _rowId;