2013-12-20 75 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