0

基本的にランダムな画像を表示するウェブサイトを作成していますが、現在持っているもののより良いコードが必要です。私は誰かがより良い解決策を思い付くことができることを望んでいます。

$p = $_GET["p"];
$qrynumrows = mysql_query("SELECT * FROM pictures");
$numrows = mysql_num_rows($qrynumrows);

if (!isset($p)) {
    $randid = rand(1, $numrows);
    $qryrecord = mysql_query("SELECT * FROM pictures WHERE id='$randid'");

    while ($row = mysql_fetch_array($qryrecord)) {
        $rowp = $row["p"];
        $rowremove = $row["remove"];
    }

    if ($rowremove == 1) {
        header("Location: http://www.lulzorg.com/");
        exit();
    }
    else {
        header("Location: http://www.lulzorg.com/?p=$rowp");
        exit();
    }       
}

つまり、データベースからランダムなレコードを選択することですが、レコードが許可されているかどうかを確認する必要があります。少しのコードは問題なく機能しますが、それを行うためのより良い/より速い方法があると確信しています。

$ rowremoveが0に等しい場合、画像の表示が許可されます。$ rowremoveが1に等しい場合、画像は表示できません。

ありがとう。

4

3 に答える 3

1

IDは必ずしも連続しているとは限らないため、ランダムな行を取得する方法が壊れている可能性があります。

単一のランダムな行を取得する最も簡単な方法は次のとおりです。

SELECT ... FROM ... WHERE remove = 0 ORDER BY rand() LIMIT 1

行は1つしかないため、ループは必要ありません。

$row = mysql_fetch_assoc($qryrecord);

そして、単に次の場合に使用し$row['p']ます$row != false

header("Location: http://www.lulzorg.com/?p='.$row['p']);
exit;

必要なコード全体は次のとおりです。

$p = isset($_GET['p']) ? $_GET['p'] : 0;
if (!$p) {
    $qryrecord = mysql_query("SELECT * FROM pictures WHERE remove = 0 ORDER BY rand() LIMIT 1");

    $row = mysql_fetch_assoc($qryrecord);
    if(!$row) {
        // No valid row. Do something.
        exit;
    }
    header('Location: http://www.lulzorg.com/?p=' . $row['p']);
    exit;
}
于 2012-05-26T18:06:15.970 に答える
1

ランダムなIDを生成する代わりに、結果を。で並べ替えた後、最初の行を選択するだけRAND()です。さらに、行を個別にチェックする必要をなくすために、行のNOT remove(と同等)をチェックします。remove = 0

$p = $_GET["p"];

if (is_int($p))
{
    $qryrecord = mysql_fetch_row(mysql_query("SELECT p FROM pictures WHERE NOT remove ORDER BY RAND() LIMIT 1"));
    $rowp = $qryrecord[0];
    header("Location: http://www.lulzorg.com/?p=$rowp");
    exit();
}
于 2012-05-26T18:06:39.567 に答える
0
SELECT * FROM pictures WHERE id='$randid' AND rowremove == 0

これで、すべてを次のように簡単に書き直すことができます。

$p = $_GET["p"];

if (!isset($p)) 
{
    $randid = rand(1, $numrows);
    $qryrecord = mysql_query("SELECT * FROM pictures WHERE id='$randid' AND rowremove == 0");
    $row = mysql_fetch_array($qryrecord);

    if($row)
    {
        $rowp = $row["p"];
        header("Location: http://www.lulzorg.com/?p=$rowp");
        exit();
    }
    header("Location: http://www.lulzorg.com/");
}
于 2012-05-26T18:03:02.290 に答える