2013-01-03 126 views
0

我有一個PHP表單,顯示來自MySQL表的數據。每行顯然有不同的數據,我想要做的是有一個下拉列表,顯示每行中與數據條目相關的數據。php mysql下拉列表

例如,讓我說我有兩個表。水果和Fruit_Colors,如下:

enter image description here enter image description here

因此,如果下面是我的顯示PHP的形式,命名爲水果MySQL的數據將顯示在水果列中的數據。然後,根據「Fruit」字段中的PHP表單輸出值從Fruit_Colors表中提取顏色。所以每行的下拉列表將有所不同。

enter image description here

我的PHP形式表語法是:

<table id="hor-minimalist-a"> 
    <tr> 
     <th>ID</th> 
     <th>Fruit</th> 
     <th>Color</th> 
     </tr> 
<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?> 
    <tr> 
     <td><? echo $row['id']; ?></td> 
     <td><? echo $row['fruit']; ?></td> 
     <td><SELECT NAME="fruitcolor" id="fruitcolor"> 
      <OPTION VALUE=0 > 
      *// what goes here???* 
      </option> 
      </SELECT> 
     </td> 
    </tr> 
<? } ?> 
</table> 

任何意見,我怎麼能完成這將不勝感激。請記住,此表最多可以有50行,因此需要將'水果'值傳遞給下拉列表的動態方式。

語法我知道下拉列表中的人羣是:理解,因爲總是

function fruitcolor_dropdown($db) 
    {  
    $result = $db->query("select color from Fruit_Color where Fruit=*'outputted value'*"); 
    return $result; 
    } 
    $colors= fruitcolor_dropdown($db); 
    while($row = $colors->fetch(PDO::FETCH_ASSOC)) { 
    $color=$row["color"]; 
    $optionsfruitcolors.="<OPTION VALUE=\"$color\">".$color; 
    } 

建議。感謝致敬。

+1

地方在選擇while循環,呼應值出現。 – AmazingDreams

+0

良好的數據庫設計將使用'fruitID'而不是'fruit_name'作爲鏈接字段的'fruit_color'表。你也應該在這張桌子上有一個唯一的ID字段,否則就不可能刪除一條記錄或糾正一個拼寫(例如,你在桌上有'Yello'香蕉,但是你如何解決這個問題卻沒有參考ID?) – SDC

+0

@AmazingDreams,謝謝你的時間。任何代碼片段的例子? – Smudger

回答

1

這將是壞主意來連接和消防查詢兩個時間時,你可以在單一的查詢 - 你可以看到它做demo

$query = "select f.*,group_concat(color SEPARATOR '|') as fcolor from fruit F Left join fruit_color fc using (fruit) group by fc.fruit"; 

以上將是您的查詢,你會循環它象下面這樣:

<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?> 
    <tr> 
     <td><? echo $row['id']; ?></td> 
     <td><? echo $row['fruit']; ?></td> 
     <td><SELECT NAME="fruitcolor" id="fruitcolor"> 
      <OPTION VALUE=0 > 
      <?php 
       $array = explode("|", $fcolor); 
       $count = count($array); 
       for($loop=0;$loop<$count;$loop) { 
       echo "<option>".$array[$loop]."</option>"; 
       }          
       ?> 
      </option> 
      </SELECT> 
     </td> 
    </tr> 
<? } ?> 
+0

嗨@Suresh,謝謝你的時間。任何機會,你可以詳細說明這裏發生的事情,超過我的頭。再次感謝。 – Smudger

+0

@Smudger:如果您運行查詢,由於group_concat,您將在signle行中獲取數據fruitname(Apple),顏色(紅色|綠色)。在你的while循環中,你可以通過「|」(管道)來爆炸它來創建你的下拉菜單。所以不需要兩次觸發查詢。 –

+0

@Smudger:請看看演示鏈接。 –

0

利用這個選擇框中

function fruitcolor_dropdown($db) 
{  
    $result = $db->query("select color from Fruit_Color where Fruit=*'outputted value'*"); 
    return $result; 
    while($row = $colors->fetch(PDO::FETCH_ASSOC)) { 
     $color=$row["color"]; 
     $optionsfruitcolors.="<OPTION VALUE=\"$color\">".$color; 
    } 
} 
<select name="fruitcolor" id="fruitcolor"> 
    <?php $colors= fruitcolor_dropdown($db); ?> 
</select> 
+0

謝謝,我如何將結果傳遞給MySQL語句以替換問題中的「輸出值」? – Smudger

1

檢查了這一點。我們創建一個函數來生成下拉選項。它接受數據庫和水果作爲參數 - >循環並使DOM - >將其輸出到瀏覽器。

PHP函數

function getColors($db, $fruit) 
{ 
    $result = $db->query(
      sprintf("select color from Fruit_Color where Fruit = '%s'", 
        $fruit 
      ) 
    ); 

    $output = ''; 
    while($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     $output .= sprintf(
       '<option value="%s">%s</option>', 
       $row['color'], 
       $row['color'] 
     ); 
    } 

    return $output; 
} 

模板

<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?> 
    <tr> 
     <td><? echo $row['id']; ?></td> 
     <td><? echo $row['fruit']; ?></td> 
     <td><SELECT NAME="fruitcolor" id="fruitcolor"> 
      <?php echo getColors($db, $row['fruit']); ?> 
      </SELECT> 
     </td> 
    </tr> 
<? } ?> 
+0

Hi @ phpisuber01,感謝您的回覆。工程100%。謝謝。問題,這種方法的效率如何,因爲它每行完成一個MySQL查詢。 500行= 500個查詢?這是最佳做法嗎?再次感謝 – Smudger

+1

@Smudger這不是最有效的事情,沒有。除非你瘋了,你不應該有一個問題。最佳實踐將是一種不同的方法來存儲顏色和/或SQL JOIN,以在單個查詢中訪問顏色和水果,並從那裏處理它。我沒有像我想要的那樣擅長SQL,所以我不能在那裏提供很多方向。如果你看下面的Suresh的答案,他有一個SQL查詢的例子可以一次性訪問。 – phpisuber01