私はphpアプリケーション上のユーザのリストを持っています(codeigniterを使用しています)。各ユーザは、約1000フィールドのフォームを完成させることができます。高度なMySQLの結合。クエリの高速化
ユーザー
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
...
現在
私のスクリプト:UT、彼らが選択したフィールドによって、特定のユーザー(目の色、人種、性別は...)それから私は、私は大好きです(現在は持って)しまうので、このような出力をこれらのフィールドを表示する必要があります私はこのフォームに記入したすべてのメンバーに照会してから、各フィールドをループしてすべてのフィールドを照会するので、明らかに永遠に取っています。それから、基準+ページ/オフセットに基づいてそれらをフィルタリングします。
私は、私は私の非常に遅いコードの
簡易版に慣れていない午前1つのクエリで一緒にこれらを結合する方法が必要知っている:そこの方法があるが、それを取得
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
フィルタ条件は、completed_form_fieldsテーブルの情報から動的に作成されるWHERE句の一部である必要があります。私はあなたが試みていることを想像することはできませんが、ユーザーテーブルとcompleted_form_fieldsテーブルの間にINNER JOINが必要な場合もあります。 –
@bfavaretto - 私のクエリのサンプルを追加しました – kilrizzy