0

我需要在 1 到 10,000 之间有 10,000 个随机生成的值的两个数据集,并且只找到数据集之间共有的值。然后我需要将它们从最小到最大排序。我不能使用 array_intersect() 或 array_unique()。

看来我能够使用 while 循环来为两个 MySQL 表生成随机整数并使用 MySQL Query 比较和排序它们。我不完全确定我的结果是否准确,我正在寻找一种更有效的方法来完成这项任务。有人可以告诉我我是否成功完成了我的任务以及解决此问题的替代方法。我需要知道我的 Select 语句是否产生了正确的结果以及如何改进它。

 <?php
// CONNECT TO THE DATABASE
$DB_NAME = 'e3';
$DB_HOST = 'localhost';
$DB_USER = 'e3';
$DB_PASS = 'exercise3password';
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
       $x = 0;
        while($x <= 10000){
        $randa = rand(1,10000);
        $randb = rand(1,10000);
$query = "INSERT into a (num) VALUES ($randa)";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$query = "INSERT into b (num) VALUES ($randb)";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$x++;
}

$query = "SELECT * FROM a INNER JOIN b on a.num=b.num WHERE a.num=b.num ORDER BY a.num";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
// GOING THROUGH THE DATA
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo stripslashes($row['num']); 
echo "<br>";
}
}
else {
echo 'NO RESULTS';  
}
// CLOSE CONNECTION
mysqli_close($mysqli);

?>
4

1 回答 1

0

您的 WHERE 子句仅重申您的 ON 子句中先前指定的条件。因此,它是多余的。此外,为了提高效率,请删除“*”并命名您实际希望返回的每一列。除此之外,您的查询很好。

于 2013-04-04T15:56:04.220 回答