foreach循环中的php mysql rand()

jrcvhitl  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(405)

我用所有的个人资料做了一个页面。每隔3行,我在结果之间插入一个高级块。我在页面上有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个不同的块)。

8wigbo56

8wigbo561#

在使用一个查询(您可以添加 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);
   }
 }

相关问题