2012-09-05 37 views
1

是否可以使用mysql运行只有一个查询mysql,然后做两个不同的结果while循环。我如何做2 PHP的while循环与1 MySQL的查询?

//this is the query 
$qry_offers = mysql_query("SELECT * FROM offers ORDER BY offer_end ASC"); 
在第一回路

,我要显示其具有“END_DATE”少或在第二循环中比今天

<div id="current"> 
<? 
while($row_offers = mysql_fetch_assoc($qry_offers)) { 
    if ((date("Y-m-d H:i:s")) <= ($row_offers['offer_end'])) { 
     echo '<li><a href="#">'.$row_offers['offer_name'].'</a></li>'; 
    } 
} 
?> 
</div><!-- END OF CURRENT --> 

等于任何结果,我要显示具有任何结果一个 “end_date之间的” 大于今天

//this is where i would have the 2n while loop 
<div id="inactive"> 
<? 
    while($row_offers = mysql_fetch_assoc($qry_offers)) { 
    if ((date("Y-m-d H:i:s")) > ($row_offers['offer_end'])) { 
     echo '<li><a href="#">'.$row_offers['offer_name'].'</a></li>'; 
    } 
} 
?> 
</div><!-- END OF INACTIVE --> 
+0

你试过了吗?什么不是这个工作? – bretterer

+0

@bretterer:是的,我试过了,我只得到第一个循环的结果。第二个是空的 – Azukah

+0

在第二个循环之前使用'mysql_field_seek($ qry_offers,0)',但我更喜欢Ansrew的答案! – undone

回答

4

解决方法是保存每个循环的结果,然后将它们放在一起。

$offers_current = array(); 
$offers_inactive = array(); 

while($row_offers = mysql_fetch_assoc($qry_offers)) { 
    if ((date("Y-m-d H:i:s")) <= ($row_offers['offer_end'])) 
     $offers_current[] = '<li><a href="#">'.$row_offers['offer_name'].'</a></li>'; 
    if ((date("Y-m-d H:i:s")) > ($row_offers['offer_end'])) 
     $offers_inactive[] = '<li><a href="#">'.$row_offers['offer_name'].'</a></li>'; 
} 

?> 
<div id="current"> 
    <ul> 
    <?php echo implode("\n", $offers_current) ?> 
    </ul> 
</div> 
<div id="inactive"> 
    <ul> 
    <?php echo implode("\n", $offers_inactive) ?> 
    </ul> 
</div> 
+0

谢谢队友!伟大的作品:) – Azukah

+1

+1通过数据集。如果现在他们彼此相邻,也可以替换第二个。 – Tony

+0

@Tony不使用'else'提供了一个稍微更通用的解决方案,但事实是我没有看到它。我在PHP中看到的最常见错误之一就是无处不在地传递大量数据结构,就像结果集一样。当你阅读它时,它的可扩展性更好,可以处理结果集,我想鼓励它。 – staticsan

3

你可以这样做:

$itemsArray = mysql_fetch_assoc($qry_offers); 
foreach ($itemsArray as $row_offers) { 
    // ... Code in here for less than 'offer_end' 
} 
foreach ($itemsArray as $row_offers) { 
    // ... Code in here for greater than 'offer_end' 
}