Добавление выбранного атрибута к выводу group_concat в Codeigniter / MYSQL - PullRequest
1 голос
/ 04 октября 2010

Я выводю простой список опций из меню динамического выбора, используя 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
                ");

ПОСМОТРЕТЬ СТРАНИЦУ

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

Это работает удивительно хорошо, пока я не захочу добавить атрибут html selected к определенным параметрам, которые извлекаются из другой таблицы.

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

Я и еще один опытный программист пытались достичь этого несколькими способами.

Использование массива со счетчиком (это прекрасно работало, но мы не могли увеличить счетчик в запросе) в сочетании с оператором IF

Наш запасной вариант - избавиться от одного запроса MYSQL, используя GROUP_CONCAT и используя несколько вызовов базы данных и несколько операторов PHP для вывода кода.

Буду признателен за любую помощь, поскольку мы действительно ударились о кирпичную стену.

Спасибо

Тим

1 Ответ

0 голосов
/ 04 октября 2010

Не проверено, попробуйте:

   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
...