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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top