2015-10-14 129 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++; 
}