【问题标题】:Optimize a MYSQL query while loop output with a for loop combination PHP使用 for 循环组合 PHP 优化 MYSQL 查询 while 循环输出
【发布时间】:2015-10-14 15:57:54
【问题描述】:

我试图从 mysql 查询中输出每一行的样式略有不同,但我想尽量避免使用偏移量和多个查询。

当前代码:

$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 个(或更多)查询,因为我想为每个 while 行使用不同的 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>
...

【问题讨论】:

  • 你能用表格结构更新你的问题吗?还有什么应该是所需的输出?
  • “表结构”到底是什么意思?所需的输出写在上面: echo '
    '.$title.'
    ';
  • 期望的输出应该是什么?

标签: php mysql for-loop foreach


【解决方案1】:

我假设你想要 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)

【讨论】:

  • 我认为您需要在 while 循环中添加增加 $i 的部分。
  • 啊,是的,我已经添加进去了
  • 太棒了!真的很甜!感谢您的帮助和解决方案!
【解决方案2】:

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

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

这意味着我们可以将条件从if($i&lt;3){if($i&lt;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++;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多