在一个数组中合并两个MySQL查询

时间:2013-07-27 15:35:40

标签: php mysql

此查询的目的是从同一个表中检索真实图像和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++;
 }

3 个答案:

答案 0 :(得分:3)

使用UNION clause

$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()";

要获得可以使用的结果,例如 MySQLi (在OP添加带有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_*函数,它们是deprecated,将在未来的PHP版本中删除。请改用MySQLiPDO有关详细信息,请参阅Why shouldn't I use mysql_* functions in PHP?

答案 1 :(得分:0)

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

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

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

将为您提供一个条目列表,其中第一部分为user = $word,其他3个条目为

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

答案 2 :(得分: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依赖于缓冲而不将其发送到浏览器,但该选项可能已关闭:What is output buffering)。