PHP MySQL从表中选择随机值

时间:2015-09-24 17:42:32

标签: php mysql select random

我正试图从location表中获取一个随机城市但是没有工作, 我已经搜索了Stack并尝试了很多方法仍然没有让它工作。

<?php  include "../database.php"?>
<?php

$sSQLQuery = mysql_query("SELECT city FROM location ORDER BY RAND() LIMIT 1;");

$aResult = mysql_query($sSQLQuery); 

?>

<span class="h3"><?php echo $aResult ?></span>

3 个答案:

答案 0 :(得分:1)

使用您提供的方法资源密集型不是非常随机缓慢且效率低下MySQL RAND(),特别是ORDER BY RAND()显然效率低下。

ORDER BY随机值,需要调用整个表,然后进行随机播放,例如随机播放包中的每张卡片,以便从顶部挑出第一张卡片,留下了51张被调用,加载和洗牌的卡片,没有输出。

有关该主题的各种讨论会破坏基本的SQL代码,以获得更好的结果,例如:https://stackoverflow.com/a/17757787/3536236

更多内容可以在这里阅读:http://theoryapp.com/select-random-records-in-mysql/

那么,可以做些什么?

好吧,如果你的location表有一个Id列(当然是索引的),你确实应该这样,那么这会让生活变得更轻松。

如果您在Id列中有 NO GAPS ,那么您只需找到最大值并从1到最大值中选择一个随机数,

所以

$maxSql = mysqli_query($connection, "SELECT id FROM location ORDER BY id DESC LIMIT 1"); 
$max = mysqli_fetch_array($maxSql);
$max = $max['id'];

这通过索引的数字ID列对表进行排序,并取最高值,然后将其插入到PHP随机函数中,以便为您提供:

$id = mt_rand(1,$max);

然后

$sSQLQuery = mysqli_query($connection, "SELECT city FROM location 

WHERE id =&#39; $ id&#39;限制1;&#34;);     $ city = mysqli_fetch_array($ sSQLQuery);

如果你 有差距,那么在循环中运行第一部分来检查该值是否存在会更容易,如果它存在则返回该行,例如:

unset($found);
while(!$found){
$sSQLQuery = mysqli_query($connection, "SELECT city FROM location WHERE id = '$id' LIMIT 1;");
if (mysqli_num_rows($sSQLQuery)){
    $found = true;
    $city = mysqli_fetch_array($sSQLQuery);
    }
$id = mt_rand(1,$max);
}
unset($found);

(还有很多事情可以做,而且这里的代码并不完美 - 远非如此 - 但我想要的概念是,对于任何有意义的大小的数据库表,那么它更好,效率更高由PHP提供的随机因素而不是内部的MySQL.PHP提供更随机的范围和更容易随机生成MySQL,以及1000行以上的表,RAND()真的,真的应该是避免,我发现在页面加载中添加~0.25-0.4秒,从~500的表中以#34;随机&#34;方式排序一组100个结果。)

如果重要的话,研究和使用MySQLi(或PDO),MySQL_中没有未来(并且很少存在)。 Updating from MYSQL to MYSQLI

答案 1 :(得分:0)

试试这个:

    <?php
$result = $mysqli->query("SELECT COUNT(*) FROM mytable")
while ($row=$result->fetch_row()) { $count = $row[0]; }
$offset = rand(0,$count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...

答案 2 :(得分:0)

使用类似的东西:

while($row = mysql_fetch_array($aResult))
                {
                  echo '<tr class="select">';
                  echo '<td>'.$row['city'].'</td>';
                  echo '</tr>';
                }