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)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top