Adición de atributo seleccionado a la salida GROUP_CONCAT en CodeIgniter / MySQL
-
27-09-2019 - |
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
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