2013-02-21 47 views
0

我有一個MySQL數據庫,其中包含一個名爲images的表。在該表中,我有一個名爲file_name的列。該file_name列包含5行:生成一個5位數字,但從MySQL表列中除外

.---.-----------. 
| # | file_name | 
.---.-----------. 
| 1 | 00000  | 
| 2 | 00001  | 
| 3 | 00002  | 
| 4 | 00003  | 
| 5 | 00004  | 
.---------------. 

我的查詢代碼是:

<?php 
require_once('config/config_db.php'); 
$SQLquery = "SELECT `file_name` FROM images"; 
$result = mysql_query($SQLquery); 

while($row = mysql_fetch_array($result)){ 
    echo $row['file_name']."<br>"; // ? 
} 
?> 

我有以下的PHP函數誰產生一個5位數的隨機函數,但我產生的異常是手動引入$exception變量數組(如下圖所示)。我的目標是從file_name列中取得所有行,並設置爲$exception變量。我試圖達到這個3或4個小時,但沒有成功。感謝您的時間。

PHP函數:

<?php 
function getRandom($exception=array('00000', '00001', '00002', '00003', '00004')){ // ? 
    $rand = str_pad(mt_rand(0,99999),5,0,STR_PAD_LEFT); 
    if(in_array($rand,$exception))return getRandom($exception); 
    return $rand; 
} 

echo getRandom().'<br>'; 
?> 
+0

1)停止使用'mysql_'函數。 2)獲取並存儲數據庫ID到數組中,將數組傳遞給函數,然後使用類似'array_diff()'的東西。 – Kermit 2013-02-21 15:17:14

+0

退一步,您是否嘗試返回以前未使用的5位數字? – Kickstart 2013-02-21 15:30:24

+0

我嘗試生成一個以前沒有使用過的數字。 – CBuzatu 2013-02-21 15:34:41

回答

0

基於我剛纔的問題,這可能會做的工作你在一個SQL語句: -

SELECT aNumber 
FROM (
SELECT LPAD(CONVERT(a.i+b.i*10+c.i*100+d.i*1000+e.i*10000,CHAR(5)),5,'0') AS aNumber 
FROM integers a, integers b, integers c, integers d, integers e) Sub1 
LEFT OUTER JOIN images b ON Sub1.aNumber = b.file_name 
WHERE b.file_name IS NULL 
ORDER BY RAND() 
LIMIT 1 

使用稱爲整數與單個列的表稱爲i和10行的值爲0到9.

它使用ORDER BY RAND()這有點慢,所以可能值得你優化一下。

相關問題