2014-03-06 27 views
-1

我試圖從數據庫返回結果並輸出到HTML。 如果feature = 1,那麼我希望顯示與產品關聯的圖像。在此之下,我還希望顯示所有結果的標題,而不考慮特徵的值。這也全部按變量$group_date中的release_date分組。通過MySQL循環選擇數據與PHP如果語句

我在底部提供的代碼允許我檢索像這樣的數據(我認爲這是循環下一行並輸出到下一個之前,但我不知道什麼解決方案是):

group_date 
     -----  -----  ----- 
     |img|  |img|  |img| 
    title ----- title ----- title ----- title 

    group_date 2 
     -----  -----  ----- 
     |img|  |img|  |img| 
    title ----- title ----- title ----- title title 

我想結果要顯示這樣

group_date 
    ----- ----- ----- 
    |img| |img| |img| 
    ----- ----- ----- 
    title 1 
    title 2 
    title 3 
    title 4 

    group_date 2 
    ----- ----- ----- 
    |img| |img| |img| 
    ----- ----- ----- 
    title 1 
    title 2 
    title 3 
    title 4 
    title 5 
    .... 

這裏是代碼我現在有

<?php 
$dsn = "mysql:host=localhost;dbname=dbname;charset=utf8"; 
$opt = array(
PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_GROUP 
); 
$db = new PDO($dsn,"user", "pass", $opt); 

$stmt = $db->query("SELECT * FROM products ORDER BY release_date ASC, rating DESC"); 
$group_date = ""; 
?> 
<body> 
<div class="container"> 
    <div> 
    <div> 
<div id="contentWrapper"> 
<?php 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
if ($group_date !== substr($row["release_date"], 0, 10)) { 
$group_date = substr($row["release_date"], 0, 10); 
?> 
<?=$group_date;?> 
<div> 
<?php } 
$feature= $row['feature']; 

if($feature=='1') 
{?> 
<a href="<?=$row['product_url']?>" title="<?=$row['title']?>"> 
    <img src="<?=$row['img_url']?>" width='180' height='267' alt="<?=$row['title']?>"/> 
</a> 
<?php } ?> 

<?=$row['title']?> <br> 

<?php } ?> 
</div> 
</div> 

</div> 
    </div> 
</div> 

回答

0

我在代碼中做了一些更改 - 請嘗試讓我知道。我已經基本上將標題保存在一個字符串中,並且只有在打印日期時纔打印它們,然後將其重新初始化爲「」。我已將// ADDED放在我放入代碼的行的前面。

<?php 
$dsn = "mysql:host=localhost;dbname=dbname;charset=utf8"; 
$opt = array(
PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_GROUP 
); 
$db = new PDO($dsn,"user", "pass", $opt); 

$stmt = $db->query("SELECT * FROM products ORDER BY release_date ASC, rating DESC"); 
$group_date = ""; 
$title = ""; //ADDED 
?> 
<body> 
<div class="container"> 
<div> 
<div> 
<div id="contentWrapper"> 
<?php 
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($group_date !== substr($row["release_date"], 0, 10)) { 
    $group_date = substr($row["release_date"], 0, 10); 
?> 
<?php 
    echo $title == "" ? "" : $title; //ADDED 
    $title = ""; //ADDED 
    echo $group_date; 
?> 
<div> 
<?php } 
$feature= $row['feature']; 

if($feature=='1') 
{?> 
<a href="<?=$row['product_url']?>" title="<?=$row['title']?>"> 
    <img src="<?=$row['img_url']?>" width='180' height='267' alt="<?=$row['title']?>"/> 
</a> 
<?php } ?> 

<?php 
$title = $title . "<br>" . $row['title']; //ADDED 
?> <br> 

<?php } ?> 
</div> 
</div> 

</div> 
    </div> 
</div> 
+0

嘗試你的代碼後,它似乎幾乎是我想要的。我遇到了兩個問題:它爲沒有圖像的所有結果添加換行符。在最後一組分組結果中的圖像之後,標題似乎缺失。 – mrbiscuits

+0

我已通過從<?php $ title = $ title刪除'
'來解決圖像之間的換行符問題。 「
」。 $行[ '標題']; // ADDED ?>
'。我認爲最後的結果缺失了,因爲標題已鏈接到下一個組日期,但是當它到達結尾時沒有另一個組日期,因此標題未打印。你知道如何解決這個問題嗎? – mrbiscuits

+0

只需在while循環關閉後放置此行 - echo $ title;這將打印結束時標題字符串中剩下的任何內容。讓我知道它是否有效。 –

0

您的許多打開和關閉的php標籤使代碼horrbile閱讀和理解。 我的建議是:

遍歷所有的結果和附加到您的HTML標記,以單獨的字符串:

while($row=...){ 
    $imgList2 .= "<Any html tags and content with any $row["variables"] inside>"; 
    $titleList2 .= "<Any html tags and content with any $row["variables"] inside>"; 
    if(condition for first list){ 
     $imgList1 .= "<Any html tags and content with any $row["variables"] inside>"; 
     $titleList1 .= "<Any html tags and content with any $row["variables"] inside>"; 
    } 
} 
//now echo both strings as you want 
echo $fimgList1; 
echo $titleList1; 
echo $fimgList2; 
echo $titleList2; 

另一種可能性是,以填補到單獨的同時通過成果循環數組(每個列表)然後用foreach循環這些數組以顯示它們。