Итак, это мой случай: у меня есть три таблицы (major_criteria, вопросы и результаты)... Существует несколько основных критериев, и один основной критерий содержит несколько вопросов. В таблице результатов содержатся все ответы пользователей на эти вопросы. Используя этот код:
Код: Выделить всё
$this->db->simple_query('set session group_concat_max_len=1000000');
$this->db->select('*, GROUP_CONCAT(CONCAT("", eq_question, "", r_value) SEPARATOR "") as quesrate', false);
$this->db->from('evaluation_result');
$this->db->join('evaluation_question', 'evaluation_question.eq_ai=evaluation_result.er_eq_ai', left);
$this->db->join('evaluation_major_criteria', 'evaluation_major_criteria.emc_ai=evaluation_question.eq_emc_ai', left);
$this->db->join('rating', 'rating.r_ai=evaluation_result.er_rate', left);
$this->db->where('er_il_ai', $inst);
$this->db->where('er_ay_ai', $aca);
$this->db->where('er_sem_ai', $sem);
$this->db->where('er_et_ai', $evaltype);
$this->db->order_by('emc_code', 'asc');
$this->db->group_by('emc_code', 'asc');
$query=$this->db->get();
А. Основные критерии 1
Вопрос 1 | Ответ 1
Вопрос 1 | Ответ 2
Вопрос 1 | Ответ 3
Вопрос 2 | Ответ 1
Вопрос 2 | Ответ 2
Вопрос 2 | Ответ 3
Б. Основные критерии 2
Вопрос 1 | Ответ 1
Вопрос 1 | Ответ 2
Вопрос 1 | Ответ 3
Вопрос 2 | Ответ 1
Вопрос 2 | Ответ 2
Вопрос 2 | Ответ 3
...
Мне удалось сгруппировать их по основным критериям. Но это близко к тому, чего я хочу достичь. Я хочу также сгруппировать его по вопросам, чтобы он не повторялся по количеству ответов пользователей.
Примерно так:
A. Основные критерии 1
Вопрос 1 | Ответ 1, Ответ 2, Ответ 3
Вопрос 2 | Ответ 1, Ответ 2, Ответ 3
Б. Основные критерии 2
Вопрос 1 | Ответ 1, Ответ 2, Ответ 3
Вопрос 2 | Ответ 1, Ответ 2, Ответ 3
...
Я пробовал использовать два group_by, и это не работает так, как я хочу, в соответствии с этим: Использование group by для нескольких столбцов
Я пытался поместить DISTINCT в GROUP_CONCAT, но это дает мне действительно странную комбинацию вопросов (некоторые все еще повторяются) при правильно сгруппированных основных критериях.
Я пробовал вложенные операторы выбора с одним или двумя group_by.
Не знаю. Может быть, я смотрю не в том направлении?
У меня закончились ресурсы. Я осмотрелся и перепробовал все, что нашел, но все равно безуспешно. Это мое последнее средство. Кстати, я использую для этого codeigniter.
РЕДАКТИРОВАТЬ:
У меня также есть этот код, когда я впервые создал страницу:
Код: Выделить всё
$this->db->select('*', false);
$this->db->from('evaluation_result');
$this->db->join('evaluation_question', 'evaluation_question.eq_ai=evaluation_result.er_eq_ai', left);
$this->db->join('evaluation_major_criteria', 'evaluation_major_criteria.emc_ai=evaluation_question.eq_emc_ai', left);
$this->db->join('rating', 'rating.r_ai=evaluation_result.er_rate', left);
$this->db->where('er_il_ai', $inst);
$this->db->where('er_ay_ai', $aca);
$this->db->where('er_sem_ai', $sem);
$this->db->where('er_et_ai', $evaltype);
$this->db->where('eq_s_ai', 2);
$this->db->order_by('emc_code', 'asc');
$this->db->group_by('eq_ai');
$query=$this->db->get();
Подробнее здесь: https://stackoverflow.com/questions/353 ... odeigniter
Мобильная версия