2010-10-04 62 views
1

我正在使用Codeigniter/MYSQL從動態選擇菜單中輸出一個簡單的選項列表。將選定屬性添加到Codeigniter/MYSQL中的group_concat輸出

控制器

$data['get_custom_fields'] = $this->db->query(" 
       SELECT a.custom_field_name, a.custom_field_id, 
GROUP_CONCAT('<option name=\"',c.custom_field_value_id, '\" value=\"', c.custom_field_value_id , '\">',c.custom_field_value_name , '</option>' ORDER BY c.custom_field_value_id ASC SEPARATOR ' ') as field_values 
       FROM projects_custom_fields a 
       JOIN projects_custom_fields_values c ON c.custom_field_id = a.custom_field_id 
       GROUP BY a.custom_field_id 
       ORDER BY c.custom_field_id ASC 
       "); 

視圖頁面

<?php if($get_custom_fields->result_array()) { ?> 
<?php foreach($get_custom_fields->result_array() as $fRow): ?> 
<tr> 
    <td><label>Select <?php echo $fRow['custom_field_name']; ?></label></td> 
    <td><select name="custom_field_<?php echo $fRow['custom_field_id']; ?>"> 
     <?php echo $fRow['field_values']; ?> 
    </select> 
    </td> 
</tr> 
<?php endforeach; ?> 
<?php } ?> 

,直到我要到HTML selected屬性添加到從另一個表拉到某些選項這工作得非常好。

$data['get_custom_reg'] = $this->db->query(" 
    SELECT custom_field_id, custom_field_value_id 
    FROM projects_custom_fields_reg 
    WHERE project_id = $project_id 
     "); 

我和另一位有經驗的程序員一直在玩幾種方法來實現這一點。

使用數組用計數器(這個偉大的工作,但我們無法增加查詢中的計數器),再加上一個IF語句

我們的後備選項是使用GROUP_CONCAT擺脫單一的MySQL查詢和使用多個數據庫調用和幾個PHP語句來輸出代碼。

所有的幫助將不勝感激,因爲我們真的打磚牆。

感謝

回答

0

未經測試,嘗試:

SELECT a.custom_field_name, 
      a.custom_field_id, 
      GROUP_CONCAT('<option name=\"',c.custom_field_value_id, '\" value=\"', c.custom_field_value_id, CASE WHEN r.project_id IS NOT NULL THEN 'selected' ELSE '' END, '\">',c.custom_field_value_name , '</option>' ORDER BY c.custom_field_value_id ASC SEPARATOR ' ') as field_values 
    FROM projects_custom_fields a 
    JOIN projects_custom_fields_values c ON c.custom_field_id = a.custom_field_id 
LEFT JOIN projects_custom_fields_reg r ON r.custom_field_value_id = c.custom_field_value_id 
             AND r.custom_field_id = a.custom_field_id 
             AND r.project_id = ? 
GROUP BY a.custom_field_id 
ORDER BY c.custom_field_id 
+0

相當的接近......我不用必要的,但給我怎麼辦案件MySQL和帶領我們到正確的是什麼回答。再次感謝! – Tim 2010-10-04 22:42:54

相關問題