2011-08-22 60 views
0

如果我的mysql數據庫中有5行,id爲2,4,5,6和8,我回顯出id 5然後我如何回顯出行號當然會是第3排?通過計算從數據庫的開頭到我所在的行的所有行,我得到第3行。對數據庫中的行進行計數,並回顯出期望的行號

+0

看來您已經意識到解決方案可能涉及'count'。那麼你已經嘗試過了什麼? –

+1

請記住,你不能指望這個行號是恆定的。沒有'ORDER BY'子句的SQL查詢不保證任何順序。 – Crack

+0

我試過了一塊代碼,它回顯了我在數據庫中的所有行,還有另一塊代碼可以回顯出數據庫中有多少行。 –

回答

1

嘗試使用

SELECT @row_num:[email protected]_num+1 as row_number, id from table inner join (select @row_num:=0) as temp 

$pdo = new PDO(....); 
$result = $pdo->query($sql)->fetchAll(); 
foreach($result as $row) { 
    print_r($row); 
} 
+0

+1您還可以使用UNION來代替JOIN來初始化變量 - 如果您想避免連接的開銷,請使用:'SELECT NULL AS row_num,NULL AS id FROM dual WHERE(@row_num:= 0) UNION ... WHERE產生*不可能的WHERE *,所以它不返回任何行,但是它初始化變量。 – Mike

+0

好吧,我一直在使用PHP大約一年,所以我知道很多,但從來沒有遇到過這樣的查詢。你想如何迴應它? –

+0

@Martin L:'@ row_num'是[用戶定義的變量](http://dev.mysql.com/doc/refman/5.5/en/user-variables.html)。在查詢中生成動態值非常方便。如果您執行SELECT @row_num:= @ row_num + 1 AS row_num',那麼'row_num'將作爲查詢中的一列返回 - 就像真正的列一樣。 – Mike

0

正確的解決辦法是增加一些AUTO_INCREMENT關鍵是你的表,那麼每一行會分配的序列號。否則,您不能保證爲每個ID獲取相同的編號,因爲沒有ORDER BY子句的SQL查詢不能保證有任何順序(即,ID可能以隨機順序返回)。

否則,由Andrej L給出的解決方案是正確的。

+0

我在創建數據庫時將ID列設置爲auto_increment。 –

+0

關於你想要達到什麼的更好的描述會有所幫助。目前我沒有看到真正的理由來做你需要的計數。 – Crack

0

難道你不能只按照你使用的排序順序來計算行數嗎?

COUNT(*) FROM table WHERE id < ? 

在這種情況下,只有ID爲2和3行會算,所以結果是2.如果您使用的是基於1的索引,添加一個到,你有你的答案。

+0

我會給你一個鏡頭,讓你知道它發生了什麼。 –