2015-10-14 98 views
0

我试图从一个mysql查询输出每一行在样式方面略有不同,但是我想尽量避免使用偏移量和多个查询。优化MYSQL查询while循环输出与for循环组合PHP

当前代码:

​​

我会这样想避免2(或更多)查询简单,因为我想用不同的CSS类为每个而行,像这样:

$sql = "SELECT * FROM news ORDER BY id DESC LIMIT 10"; 
$query = mysqli_query($connection, $sql); 
while($row = mysqli_fetch_array($query)){ 
$title = $row["title"]; 
} // end while 
$i = 1; 
for($i; $i<2; $i++){ // output first row item with first style 
echo '<div class="style-1">'.$title.'</div>'; 
} // end for loop 1 
for($i; $i<3; $i++){ // output first row item with second style 
echo '<div class="style-2">'.$title.'</div>'; 
} // end for loop 2 
for($i; $i<4; $i++){ // output third row item with third style 
echo '<div class="style-3">'.$title.'</div>'; 
} // end for loop 3 
    ... 

所需的输出:

<div class="style-1">News Headline Title 1</div> 
<div class="style-2">News Headline Title 2</div> 
<div class="style-3">News Headline Title 3</div> 
... 
+0

你可以更新表结构,并与应该是什么样的期望输出你的问题? – Maximus2012

+0

你究竟用“表格结构”是什么意思?期望的输出写在上面:echo'

'.$title.'
'; – rainerbrunotte

+0

应该输出什么? – Maximus2012

回答

2

我假设你想3种不同的风格,这里是如何我将实现此目的:

$sql = "SELECT * FROM news ORDER BY id DESC LIMIT 10"; 
$query = mysqli_query($connection, $sql); 

$i = 1; 

while($row = mysqli_fetch_array($query)){ 
    $title = $row["title"]; 
    if($i<2){ 
     $styleNumber = 1; 
    } 
    else if($i<3){ 
     $styleNumber = 2; 
    } 
    else if($i<4){ 
     $styleNumber = 3; 
    } 
    echo '<div class="style-'.$styleNumber.'">'.$title.'</div>'; 
    $i++; 
} 
// end while 

输出
标题1(样式1)
标题2(样式2)
标题3(风格3)
标题4(风格3)

+2

我认为你需要添加你在while循环中增加'$ i'的部分。 – Maximus2012

+1

啊是的,我已经加入 –

+0

真棒!作品真的很甜!感谢您的帮助和解决方案! – rainerbrunotte

0

这不是一个答案。只是评论/改进@JonTan的答案,因为它被选为正确的答案。

我的猜测是,OP需要为每3条记录循环样式,但不要设置3样式返回。

这意味着我们可以改变从if($i<3){if($i<2){条件是这样的:

$i = 1; 

while($row = mysqli_fetch_array($query)){ 
    $title = $row["title"]; 
    if($i % 3 == 0){ 
     $styleNumber = 3; 
    } else if($i % 2 == 0){ 
     $styleNumber = 2; 
    } else { 
     $styleNumber = 1; 
    } 
    echo '<div class="style-'.$styleNumber.'">'.$title.'</div>'; 
    $i++; 
}