2009-06-12 65 views
0

我試圖抓取隨機數。通過使用來自數據庫的條目在數組中保存一列

SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10 

它返回一列數據庫。

如果我想保存一個數組中的所有條目,那麼我必須使用哪個php函數來保存該列。

回答

2

沿此線的東西嗎?

$result = mysql_query("SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10"); 
$rows = array(); 
while ($row = mysql_fetch_row($result)) { 
    $rows[] = $row[0]; 
} 

更新爲不使用$ i變量,如第一篇文章和評論中指出的那樣。

+0

你實際上並不需要計數器($ i)。如果你只是分配給$ rows [],它會自動在數組的末尾創建一個新的「插槽」。 – 2009-06-12 06:53:13

1

查看一些示例,瞭解如何運行查詢並獲取結果集。

http://www.php.net/mysqli

一旦有結果的變量,這樣做:

$myarray = array(); 
while($row = mysqli_fetch_row($result)) 
    $myarray[] = $row[0]; 
1

隨着PDO:

$qryStmt = $dbc->query('SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10'); 
$a = $qryStmt->fetchAll(PDO::FETCH_COLUMN); 
+0

我想你想PDO :: FETCH_COLUMN而不是PDO :: FETCH_ASSOC – 2009-06-12 08:51:59

0

順便說一句:如果你只是想通過隨機獲得一排,這是更快的ESP。對於大型表格:

select * from table limit 12345,1;

其中12345只是從count()行計算得出的隨機數。

see here,這是更多的軌道,但也看看評論。

但要小心:在限制12345,2 - 第二行不是隨機的,而是隨機行之後的下一行。並且要小心:當我記得正確的時候(比如SQLServer),rand()可以被mysql以外的數據庫優化,導致所有行的隨機數相同,從而導致結果不是隨機的。這很重要,當你的代碼應該是數據庫不可知的。

0

最後一個:不要混淆「隨機」與「難以預測」,這是不一樣的。因此,SQLServer上的示例「select top 10 ... order by rand()」的順序在運行兩次時會產生兩個不同的結果集,但是:如果查看10條記錄,它們在db中彼此靠近,這意味着,它們不是隨機的。