İlişkisel MySQL - zorlama özellikleri?

1 Cevap php

Şu anda aşağıdaki PHP kodu kullanıyorum:

    // 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();
    }

Temelde sonra bu kullanıcılardan herhangi ait girdileri kapma, belirli bir supervisor_id astları (her kullanıcı girişi bir supervisor_id alan vardır) olan kullanıcıların listesini alıyorum.

Ben yardım edemem, ancak bunu yapmanın daha zarif bir şekilde SELECT FROM tablename where user->supervisor_id=2222 gibi, orada olduğunu düşünemiyorum

Is there something like this with PHP/MySQL?
Should probably learn relational databases properly sometime. :(

EDIT: here is the relevant schema

submissions
===============================
id, user_id, timestamp

submittedentries
===============================
id, user_id, timestamp

users
===============================
id, supervisor_id, email

bir submission çok submittedentries var, ve şu anda zaman damgası kullanarak bu referans ediyorum. Birisi daha verimli bir yol önermek eğer ben bu değiştirmek için daha istekli olurdu. (Ve evet, ben unutuyorum daha alanlar vardır)

1 Cevap

Ben doğru sütun adlarını var ise, bu, belirtilen danışmanım kullanıcıların gönderimler listesini almalısınız.

SELECT * FROM users, submissions
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id

Bu sürüm aynı zamanda kontrol damgası birleştirmeyi dener.

SELECT * FROM users, submissions, submittedentries
WHERE users.supervisor_id = $supervisorID
AND submissions.user_id = users.id
AND submittedentries.timestamp = submissions.timestamp

Edit: Ek tablo bilgi maç için güncellendi. Ben hala ikinci versiyonu doğru olduğundan% 100 emin değilim, :) öğrenmek için veritabanına karşı test edilmesi gerekir

Oh, ve pratikte muhtemelen almak istediğiniz gerçek sütun adları ile yıldız değiştirmeniz gerekir.