通常id为此使用foreach。但我也需要每次旋转时增加1的东西。这就是我使用while循环的原因。但我无法让它工作。 foreach循环工作正常。但是当我应用while循环时它不会做任何事情,或只是创建无限量的行显示。所以我正在寻求一些帮助。可能是一个非常简单的解决方案,但我无法看到它。
$SQL = $pdo->prepare("SELECT id, title, img_src, rating FROM movie_db ORDER BY RAND() LIMIT 3");
$SQL->execute();
$r = $SQL->fetchAll(PDO::FETCH_ASSOC);
//while($r = $row){
foreach($r as $row){
//$result = mysql_query($query, $connection) or die (mysql_error());
$i = 1;
//while ($row = mysql_fetch_array($result)) {
$id = $row['id'];
$title = $row['title'];
$img_src = $row['img_src'];
$rating = $row['rating'];
if ($i<=2){echo"<div class='featured_post left'>";}
elseif ($i=3){echo"<div class='featured_post left featured_post_last'>";}
$i++;
我也尝试使用do-while循环,但后来我根本无法显示结果,但它至少使用了正确的代码。
答案 0 :(得分:0)
elseif ($i=3)
应该是elseif ($i==3)
即
if ($i<=2){echo"<div class='featured_post left'>";}
elseif ($i==3){echo"<div class='featured_post left featured_post_last'>";}
$i++;
答案 1 :(得分:0)
ORDER BY RAND()
效率不高。我建议改为:
$qry = $pdo->query('
SELECT id, title, img_src, rating, @lim := @lim - 1
FROM movie_db, (SELECT @cnt := COUNT(*)+1, @lim := 3 FROM movie_db) init
WHERE RAND() < @lim / (@cnt := @cnt - 1)
LIMIT 3
');
至于你的问题:
for($i = 1; $row = $qry->fetch(); $i = $i<2 ? $i+1 : 0) {
$id = $row['id'];
$title = $row['title'];
$img_src = $row['img_src'];
$rating = $row['rating'];
echo '<div class="featured_post left', ($i ? '' : ' featured_post_last'), '">';
}