2013-02-10 29 views
-3

我有一個使用PHP構建的選項組。一切都很好,直到我必須獲取DetailID的值而不是DetailName才能查找記錄。我仍然需要顯示DetailName,但不顯示DetailID,我需要將DetailID添加到此。我會怎麼做?PHP選項組

<?php 
include("config.php"); 
$sql = "SELECT DetailType AS type, DetailID, GROUP_CONCAT(DISTINCT DetailName 
      ORDER BY DetailName ASC 
      SEPARATOR '|') AS DetailName FROM tblDetails GROUP BY DetailType"; 
$result = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)) { 
    echo "<optgroup label='{$row['type']}'>"; 
    $DetailNames = explode('|', $row['DetailName']); 
    foreach($DetailNames as $DetailName) { 
     echo '<option value='.$DetailID.'>'.$DetailName.'</option>'; 
    } 
    echo "</optgroup>"; 
} 
?> 

表。 tblLocDet LocationID 1,1,2,3- DetailID 1,2,3,4-

tblDetails DetailType功能,膳食期間,服務,類型 DetailID 1,2,3,4- DetailName自助,壁爐,無線網絡連接,海濱

+0

爲什麼。這沒有幫助。 – 2013-02-10 17:23:59

+0

你可以展示你的表格數據的例子嗎?我猜DetailID與DetailName一致,所以當你通過DetailType進行分組時,所有的DetailID都被分組到1中。 – Marc 2013-02-10 17:48:46

+0

是Marc。這將創建一個選項組,其中有4個。這一切都正常工作。我只需要將DetailID添加到第一行,以便我可以基於此來提取記錄。我現在基於DetailName獲取記錄。但是我仍然需要在下拉列表中顯示DetailName。 – 2013-02-10 18:00:01

回答

2

這個工程......

$sql = "SELECT DISTINCT DetailType AS type, DetailID, DetailName FROM tblDetails 
      ORDER BY DetailType, DetailName"; 
        $result = mysql_query($sql) or die(mysql_error()); 
        $prev=''; 
        while ($row = mysql_fetch_assoc($result)) { 
        if ($prev != $row['type']) { 
         if ($prev) echo "</optgroup>"; 
         echo "<optgroup label='{$row['type']}'>"; 
         $prev = $row['type']; 
         } 
         echo "<option value='".$row['DetailID']."'>".$row['DetailName']."</option>";       } 
         echo "</optgroup>";