2013-02-21 90 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()这有点慢,所以可能值得你优化一下。

相关问题