2013-12-20 30 views
0

我正在尝试创建列表中的每个第四个项目都是纽约和销售中的项目的项目列表。无论是否出售,列表中的其余项目都是来自纽约的物品。多个选择语句

如何正确使用两个select语句将列表按照我想要的顺序拆分?以下是我现在使用的。它创建了一个段落列表,但不明白变量$article$article2是什么。

<ul> 

<? 
    $sort = id; 
    $sql = "SELECT * FROM `Catalog` WHERE state = 'New York' and in_stock = 'yes' ORDER BY $sort"; 
    $result = mysql_query($sql); 

    $sql2 = "SELECT * FROM `Catalog` WHERE state = 'New York' and sale_item = 'yes' ORDER BY $sort "; 
    $result2 = mysql_query($sql2); 

    $i = 0; 

    while ($article = mysql_fetch_array($result) || $article2 = mysql_fetch_array($result2)) { 

     if ($i == 0) { 
      echo '<li>This item number is on sale:'.article2[id]. '</li>'; 
       $i++;  
     } else if ($i == 3) { 
       echo '<li>This item number is regular price'.article[id]. '</li>'; 
       $i = 0; 
     } else { 
      echo '<li>This item number is regular price'.article[id].'</li>'; 
      $i++; 
     } 
    } 
    ?> 

</ul> 

根据戴夫的建议,我试着这样。但PHP仍然不知道如何解释$ itemsOnSale或$ items。

<ul> 
<? 
$items = array(); 
$itemsOnSale = array(); 
$sql = "SELECT * FROM `Catalog` WHERE state = 'New York' AND in_stock = 'yes' ORDER BY $sort"; 
$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) { 

    if ($row['sale_item'] == 'yes') { 
     $itemsOnSale[] = $row; 
    } else { 
     $items[] = $row; 
    } 

     if ($i == 0) { 
       echo '<li>This item number is on sale:'.$itemsOnSale[id]. '</li>'; 
       $i++;  
     } else if ($i == 3) { 
      echo '<li>This item number is regular price'.$items[id]. '</li>'; 
      $i = 0; 
     } else { 
      echo '<li>This item number is regular price'.$items[id].'</li>'; 
      $i++; 
     } 

} 

    ?> 
</ul> 

回答

0

它看起来就像你在变量名的前面省略了$:

echo '<li>This item number is regular price'.article[id].'</li>'; 应该 echo '<li>This item number is regular price'.$article[id].'</li>';

顺便说一句,它看起来像你想使用什么所谓的MARS - 多个活动结果集。并非所有数据库驱动程序都支持这一点

+0

哎呀!我已将$添加到变量名称中。我明白这一点。 – user3099926

0

这是你的问题之一:

while ($article = mysql_fetch_array($result) || $article2 = mysql_fetch_array($result2)) { 

如果结果从$result发现,病情会得到满足,永不$article2被填充。您应该重新考虑您的while循环的流程。

你可以尝试像

while ($article = mysql_fetch_array($result) && $article2 = mysql_fetch_array($result2)) { 

但这将完成一次要么$article1$article2是空的。然而,你可以在后面加上另一个while循环只

while($article = mysql_fetch_array($result)) { // keep posting regular items } 

但有一个机会,你可能比常规项目多出售的物品(一切都不会得到发布。)有很多方法可以做到这一点。

此外,你必须使用$引用变量。

echo '<li>This item number is on sale:'.$article2['id']. '</li>'; 

您在原始代码中还有一个额外的右括号,请检查您的解析。

+0

为变量添加$,谢谢。仍然不知道如何重写while循环。 – user3099926

+0

我做了一些编辑,但@Dave有更好的方法来解决您的问题。试图在运行中处理两个查询的结果集是一个相当尴尬的方法。 – sjagr

+0

戴夫方法似乎是对的,但我仍然没有得到结果。编辑我的原始帖子,以显示我现在在做什么。 – user3099926

1

一个更好的方法是把所有的项目在单个查询中,将它们存储在单独的阵列,然后它们作为必要的参考。在目前的形式中,您的第二个查询会提取销售物品,但不会检查是否有库存。

$items = array(); 
$itemsOnSale = array(); 
$sql = "SELECT * FROM `Catalog` WHERE state = 'New York' AND in_stock = 'yes' ORDER BY $sort"; 
$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) { 
    if ($row['sale_item'] == 'yes') { 
     $itemsOnSale[] = $row; 
    } else { 
     $items[] = $row; 
    } 
} 

然后构建您的HTML列表,每4个循环从$ itemsOnSale中拉取一个数组项。

+0

这似乎是正确的想法,但仍然没有得到任何价值。我编辑了我的原始文章,以显示我在做什么。 – user3099926