リレーショナルMySQLの - フェッチプロパティ?
-
20-09-2019 - |
質問
私は現在、次の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
1 submission
は多くのsubmittedentries
があり、現在私は、タイムスタンプを使用してこれを参照しています。私は誰かが、より効率的な方法を提案することができれば、これを変更する意思以上になるだろう。 (はい、私は省いていますより多くのフィールドがある)
解決
私は、正しい列名を得た場合、これは、指定されたスーパーバイザーを持つユーザーからの投稿のリストを取得する必要があります。
SELECT * FROM users, submissions
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id
このバージョンでは、同様のチェックタイムスタンプを組み合わせることをしようとします。
SELECT * FROM users, submissions, submittedentries
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id
AND submittedentries.timestamp = submissions.timestamp
編集:追加の表の情報と一致するように更新。私はまだ番目のバージョンが正しいことを100%わからないんだけど、見つけるためにデータベースに対してテストする必要があります。)
ああ、実際には、あなたはおそらく、あなたが取得する実際の列の名前にアスタリスクを置き換える必要があります。
所属していません StackOverflow