Relationale MySQL - geholt Eigenschaften?
-
20-09-2019 - |
Frage
Ich bin derzeit den folgenden PHP-Code verwendet:
// 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();
}
Im Grunde eine Liste von Benutzern Ich erhalte die Untergebenen von einem bestimmten supervisor_id sind (jeder Benutzer Eintrag hat ein supervisor_id Feld), dann Einträge greifen zu einem dieses Benutzer gehören.
Das kann ich nicht helfen, aber denke, es ist ein eleganter Weg, dies zu tun, wie SELECT FROM tablename where user->supervisor_id=2222
Gibt es so etwas wie dies mit PHP / MySQL?
Sollte wahrscheinlich richtig irgendwann relationale Datenbanken lernen. : (
Bearbeiten : hier ist das entsprechende Schema
submissions
===============================
id, user_id, timestamp
submittedentries
===============================
id, user_id, timestamp
users
===============================
id, supervisor_id, email
ein submission
hat viele submittedentries
, und zur Zeit das ich Referenzierung durch den Zeitstempel verwendet wird. Ich wäre mehr als bereit, dies zu ändern, wenn jemand einen effizienteren Weg vorschlagen kann. (Und ja, es gibt mehr Felder, dass ich weggelassen)
Lösung
Dies sollte, wenn ich die Spaltennamen bekam korrigieren, um eine Liste der Einreichungen von den Benutzern erhalten, die die angegebene Supervisor hat.
SELECT * FROM users, submissions
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id
Diese Version versucht, den Zeitstempel zu kombinieren und zu überprüfen.
SELECT * FROM users, submissions, submittedentries
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id
AND submittedentries.timestamp = submissions.timestamp
Edit: Aktualisiert die zusätzliche Tabelle Info entsprechen. Ich bin immer noch nicht zu 100% sicher, dass die zweite Version richtig ist, müssen für die Datenbank getestet werden, um herauszufinden:)
Oh, und in der Praxis sollten Sie wahrscheinlich das Sternchen mit dem Namen der aktuellen Spalten ersetzen Sie abrufen möchten.