0

我有一个 MySQL 数据库,其中包含一个名为images. 在该表中,我有一个名为file_name. 该file_name列包含 5 行:

.---.-----------.
| # | 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>';
?>
4

1 回答 1

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

使用一个名为 integers 的表,其中包含一个名为 i 的列和 10 行,其值为 0 到 9。

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

于 2013-02-21T15:40:39.263 回答