2010-10-04 2 views
1

Je génère une simple liste d'options à partir de menus de sélection dynamique en utilisant Codeigniter/MYSQL.Ajout de l'attribut sélectionné à la sortie group_concat dans Codeigniter/MYSQL

CONTRÔLEUR

$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 
       "); 

Voir la page

<?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 } ?> 

Cela fonctionne étonnamment bien jusqu'à ce que je veux ajouter l'attribut html selected à certaines options qui sont tirées d'une autre table.

$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 
     "); 

Moi-même et un autre programmeur expérimenté avons joué avec quelques moyens pour y parvenir.

L'utilisation d'un tableau avec un compteur (cela a fonctionné très bien, mais nous ne pouvions pas incrémenter le compteur dans la requête) couplée à une instruction IF

Notre option de repli est de se débarrasser de la seule requête MYSQL en utilisant GROUP_CONCAT et en utilisant plusieurs appels de base de données et plusieurs instructions PHP pour produire le code.

Toute aide serait grandement appréciée car nous avons vraiment atteint un mur de briques.

Merci

Tim

Répondre

0

Untested, essayez:

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

Sacrément fermer ... Pas tout à fait ce que je devais, mais m'a montré comment faire CASES MySQL et nous a conduits à droite répondre. Merci encore! – Tim

Questions connexes