Aggiunta attributo selezionato all'uscita group_concat in Codeigniter / MYSQL
-
27-09-2019 - |
Domanda
Sto outputing un elenco semplice di opzioni da selezionare i menu dinamici utilizzando Codeigniter / MYSQL.
CONTROLLER
$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
");
VISUALIZZA PAGINA
<?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 } ?>
Questo funziona incredibilmente bene fino a quando voglio aggiungere l'attributo HTML selected
ad alcune opzioni che vengono estratti da un altro tavolo.
$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
");
Io e un altro programmatore con esperienza hanno giocato con alcuni modi per raggiungere questo obiettivo.
Utilizzando una matrice con un contatore (questo ha funzionato grande ma non abbiamo potuto incrementare il contatore all'interno della query) accoppiato con un'istruzione IF
La nostra opzione di ripiego è quello di sbarazzarsi della query singola MYSQL utilizzando group_concat e l'utilizzo di chiamate al database multipli e diverse dichiarazioni PHP per emettere il codice.
Ogni aiuto sarebbe molto apprezzato come abbiamo davvero colpito un muro di mattoni.
Grazie
Tim
Soluzione
Non testato, provare:
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