我制作了所有个人资料页面。我每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] 删除。
我来说两句