0

。という名前のテーブルを含むMySQLデータベースがありますimages。そのテーブルには、という名前の列がありますfile_namefile_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>"; // ?
}
?>

5桁のランダム関数を生成する次のPHP関数がありますが、私の例外は$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

iと呼ばれる単一の列と値0から9の10行を持つ整数と呼ばれるテーブルを使用します。

ORDER BY RAND()を使用していますが、これは少し遅いので、少し最適化する価値があります。

于 2013-02-21T15:40:39.263 に答える