現在、次のPHPコードを使用しています。
// Get all subordinates
$subords = array();
$supervisorID = $this->session->userdata('supervisor_id');
$result = $this->db->query(sprintf("SELECT * FROM users WHERE supervisor_id=%d AND id!=%d",$supervisorID, $supervisorID));
$user_list_query = 'user_id='.$supervisorID;
foreach($result->result() as $user){
$user_list_query .= ' OR user_id='.$user->id;
$subords[$user->id] = $user;
}
// Get Submissions
$submissionsResult = $this->db->query(sprintf("SELECT * FROM submissions WHERE %s", $user_list_query));
$submissions = array();
foreach($submissionsResult->result() as $submission){
$entriesResult = $this->db->query(sprintf("SELECT * FROM submittedentries WHERE timestamp=%d", $submission->timestamp));
$entries = array();
foreach($entriesResult->result() as $entries) $entries[] = $entry;
$submissions[] = array(
'user' => $subords[$submission->user_id],
'entries' => $entries
);
$entriesResult->free_result();
}
基本的に、特定の Supervisor_id の部下であるユーザーのリストを取得し (すべてのユーザー エントリには Supervisor_id フィールドがあります)、それらのユーザーのいずれかに属するエントリを取得します。
これを行うためのよりエレガントな方法があると思わずにはいられません。SELECT FROM tablename where user->supervisor_id=2222
PHP/MySQL でこのようなものはありますか?
いつかリレーショナルデータベースをちゃんと学べばいいのに。:(
編集:ここに関連するスキーマがあります
submissions
===============================
id, user_id, timestamp
submittedentries
===============================
id, user_id, timestamp
users
===============================
id, supervisor_id, email
onesubmission
には manysubmittedentries
があり、現在、タイムスタンプを使用してこれを参照しています。誰かがより効率的な方法を提案できるなら、私はこれを喜んで変更します。(そして、はい、省略しているフィールドが他にもあります)