Pregunta

Estoy outputing una simple lista de opciones de seleccionar menús dinámicos utilizando CodeIgniter / MySQL.

Modulo de control

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

Ver página

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

Esto funciona sorprendentemente bien hasta que yo quiero añadir el atributo HTML selected a ciertas opciones que se extraen de otra tabla.

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

Yo y otro programador con experiencia han estado jugando con algunas maneras de lograr esto.

El uso de una matriz con un contador (esto funcionó muy bien, pero que no podía incrementar el contador dentro de la consulta) junto con una instrucción IF

Nuestra opción de reserva es deshacerse de la consulta MySQL usando solo GROUP_CONCAT y el uso de múltiples bases de datos y llamadas de varias declaraciones de PHP a la salida de código.

Todo tipo de ayuda sería muy apreciada, ya que realmente hemos chocado contra un muro de ladrillo.

Gracias

Tim

¿Fue útil?

Solución

No probado, intente:

   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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top