У меня есть список пользователей в моем приложении php (с использованием codeigniter). Каждый пользователь может заполнить форму размером около 1000 или около того. Структура выглядит примерно так:Продвинутое соединение MySQL. Ускорение запроса
пользователи
id|username|...
completed_form_fields
id|formid|userid|fieldkey|data
где ключевое поле является просто уникальным ключом для конкретного поля формы, то есть: "first_name"
У меня есть страница поиска пользователя, где люди могут фильтровать o у конкретные пользователи по полям они выбрали (цвет глаз, расы, пол ...) Тогда мне нужно, чтобы отобразить эти поля, так что я хотел бы (и в настоящее время) вывод так:
$filteredmembers = array(
[0] = Object(
[id] => 1
[username] => kilrizzy
...
[fields] => Array(
[fname] => Jeff
[gender] => Male
...
В настоящее время моего сценарий очевидно, навсегда, так как я запрашиваю всех членов, заполнивших эту форму, затем прокручиваю каждый из них, чтобы запросить все их поля. THEN отфильтруйте их исходя из критериев + страница/смещение.
Я знаю, что должен быть способ, чтобы присоединиться к их вместе в одном запросе я не знаком с
Упрощенная версия моего очень медленный код:
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;
}
}
Не могли бы вы высказать свой код? – bfavaretto
Критерии вашего фильтра должны быть частью предложения WHERE, которое динамически построено из информации в таблице completed_form_fields. Я не могу представить, что вы пытаетесь, но вам также может понадобиться INNER JOIN между таблицами пользователей и complete_form_fields. –
@bfavaretto - добавлен образец моего запроса – kilrizzy