首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环组合PHP优化MYSQL查询同时循环输出

使用for循环组合PHP优化MYSQL查询同时循环输出
EN

Stack Overflow用户
提问于 2015-10-14 15:57:54
回答 2查看 296关注 0票数 0

在样式方面,我试图从mysql查询中输出每一行,但我希望尽量避免使用偏移量和多个查询。

当前代码:

代码语言:javascript
复制
$sql = "SELECT * FROM news ORDER BY id DESC LIMIT 1";
$query = mysqli_query($connection, $sql);
while($row = mysqli_fetch_array($query)){
$title = $row["title"];
// output first news item with a style
echo '<div class="style-1">'.$title.'</div>';
}

$sql = "SELECT * FROM news ORDER BY id DESC LIMIT 1 OFFSET 1";
$query = mysqli_query($connection, $sql);
while($row = mysqli_fetch_array($query)){
$title = $row["title"];
// output second news item with different style
echo '<div class="style-2">'.$title.'</div>';
}

因此,我希望避免让2个(或更多)查询变得简单,因为我希望对每一行使用不同的css类,如下所示:

代码语言:javascript
复制
$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
    ...

期望产出:

代码语言:javascript
复制
<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>
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 16:07:05

我假设您需要3种不同的样式,下面是我如何实现这一点的方法:

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2015-10-14 16:52:23

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

我猜OP需要为每3条记录循环样式,而不是只为3条第一次返回的记录设置样式。

这意味着我们可以将条件从if($i<3){if($i<2){更改为以下内容:

代码语言:javascript
复制
$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++;
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33130128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档