PHP的MySQL的RAND()在foreach循环

标记

我制作了所有个人资料页面。我每3行就会在结果之间插入一个Premium块。我在页面上有12行,每3行之间有4个高级块。我需要在每个foreach循环中显示来自mysql的premium ='1'行的随机用户。

    $sth = $db->prepare("SELECT count(*) as premiumCount FROM users WHERE premium='1'");
    $sth->execute();
    $answer = $sth->fetch();
    $premium = $answer['premiumCount'];
    $sth2 = $db->prepare("SELECT * FROM users WHERE active='1' AND block='0' ORDER BY premium DESC LIMIT 12");
    $sth2->execute();
    $result = $sth2->fetchAll();
    foreach ($results as $answer) {
         // getting user info
       if ($premium > 0) {
            $sth = $db->prepare("SELECT * FROM users WHERE premium='1' ORDER BY RAND()");
            // getting premium user info
       }
     }

这段代码是可行的,但它可以是页面上的2-3个相同的高级块(我需要4个不同的块)。

不要惊慌

在循环之前使用一个查询(可以添加LIMIT 4到查询中)选择所需数量的随机高级用户,而不是在循环内部重复选择。这样,您可以确定不会重复。

获取结果并将其存储在数组中,然后在"SELECT * FROM users WHERE premium='1'...循环内运行查询的位置,改用数组中的值。您可以array_pop用来获取值,这样就不必弄乱计数器或类似的东西来跟踪数组中的位置。

// getting premium user info
$sth = $db->prepare("SELECT * FROM users WHERE premium='1' ORDER BY RAND() LIMIT 4");
$sth->execute();
$premium = $sth->fetchAll();

foreach ($results as $answer) {
     // getting user info
   if ($premium) {
        $premium_row = array_pop($premium);
   }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章