-2

这个查询的目的是从同一张表中检索一张真实的图像加上 3 个随机生成的图像,然后随机显示它们。用户(孩子)必须选择正确的图像。

谢谢

$sql= "SELECT * FROM `login` WHERE `user` = '$word'";
" UNION"
"SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3";


$row2=mysql_query($sql);

$i=1;
while ($r = mysql_fetch_array($row2))
{
 echo '<td> ';
 echo '<img src="sigg/'.$r['img'].'" width="130" height="130" /><br>';
 echo $r['user'];
 echo '</td>';
   $i++;
 }
4

3 回答 3

3

使用UNION子句

$sql = "(SELECT * FROM `login` WHERE `user` = '$word')";
$sql.= " UNION";
$sql.= " (SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3)";
$sql.= " ORDER BY RAND()";

为了获得结果,您可以使用例如(在 OP 添加他的代码和函数之前提出)MySQLi mysql_*

$MySQL=new mysqli("localhost", "username", "password", "database");
$query = $MySQL -> query($sql);
while ($entry = $query -> fetch_row())
{
    // $entry is an array with the results, use for example:
    echo $entry[0]; // will return the first column of your table
    echo $entry[1]; // will return the second column of your table

    // try also:
    var_dump($entry); // outputs everything for testing purposes
}

请不要使用这些mysql_*函数,它们已被弃用,并将在 PHP 的未来版本中删除。使用MySQLiPDO代替。请参阅为什么我不应该在 PHP 中使用 mysql_* 函数?更多细节。

于 2013-07-27T15:39:48.490 回答
0

这是php代码:

$connection = mysql_connect(HOST, USER, PASSWORD);
mysql_select_db(DATABASE_NAME, $connection);

$sql = "SELECT img, user FROM `login` WHERE `user` = '{$word}' UNION SELECT img, user FROM `login` WHERE `user` != '{$word}' ORDER BY RAND() LIMIT 3";

$results = mysql_query($sql, $connection);
$rows = array();

// Insert results in a new array to shuffle it
while ($row = mysql_fetch_array($results)) {
    $rows[] = array(
        'img' => $row['img'],
        'user' => $row['user']
    );
}

shuffle ($rows); // Randomize order

// Construct HTML
$html = '';
foreach ($rows as $entry) {
    $html .= '<td><img width="130px" height="130px" src="sigg/' . $entry['img'] . '">
    $html .= $user . '</img></td>';
}

echo $html;

您需要将大写的单词替换为必要的单词。几个解释:

  • 只替换*你需要的表(使用更少的内存)
  • 首先在数组中插入结果,以便您可以随机化顺序(从 MySQL 中,您将始终拥有第一个查询的结果的第一行)
  • 构造 html 并一次全部输出(执行多个echo依赖于缓冲不将其发送到浏览器,但该选项可能已关闭:什么是输出缓冲)。
于 2013-07-27T16:58:52.330 回答
0

您的要求不够明确,无法提供可靠的答案,所以我会尽力回答。

您应该在查询中使用Union来获取一个大的条目列表。然而,只是做

SELECT * FROM `login` WHERE `user` = '$word'
UNION
SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3

将为您提供user = $word第一部分中的条目列表和随机 3 个其他条目。

正如我所说,我不知道这样做的确切目的,但我认为您最好从数据库服务器查询整个列表。

于 2013-07-27T15:43:28.837 回答