У меня есть список пользователей в моем приложении php (с использованием codeigniter). Каждый пользователь может заполнить форму с примерно 1000 полями. Структура выглядит примерно так:
Пользователи
id|username|...
completed_form_fields
id|formid|userid|fieldkey|data
где ключ поля - это просто уникальный ключ для этого конкретного поля формы, то есть: "first_name"
У меня есть страница поиска пользователей, где люди могут отфильтровывать конкретных пользователей по полям, которые они выбрали (цвет глаз, раса, пол ...). Затем мне нужно отобразить эти поля, чтобы я хотел (и в настоящее время имею) вывод как это:
$filteredmembers = array(
[0] = Object(
[id] => 1
[username] => kilrizzy
...
[fields] => Array(
[fname] => Jeff
[gender] => Male
...
В настоящее время мой сценарий, очевидно, работает вечно, так как я опрашиваю всех участников, которые заполнили эту форму, а затем перебираю каждый из них, чтобы запросить все их поля. ТО отфильтруйте их по критериям + страница / смещение.
Я знаю, что должен быть способ объединить их в один запрос, с которым я не знаком
Упрощенная версия моего очень медленного кода:
function get_members(){
$this->db->select('u.*');
$this->db->from('users AS u');
$query = $this->db->get();
if ($query->num_rows() > 0){
$members = $query->result();
//Get fields from each user
foreach($members as $mk => $mv){
$fields = $this->get_form_fields($mv->id,1,true);
$members[$mk]->fields = $fields;
}
return $members;
}else{
return false;
}
}
function get_form_fields($uid,$form,$values=false){
$this->db->where('user', $uid);
$this->db->where('form', $form);
$query = $this->db->get('form_fields');
if ($query->num_rows() > 0){
$result = $query->result();
return $result;
}else{
return false;
}
}