代码之家  ›  专栏  ›  技术社区  ›  kbanman

关系MySQL获取的属性?

  •  0
  • kbanman  · 技术社区  · 15 年前

    我目前正在使用以下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();
        }
    

    基本上,我得到了一个用户列表,这些用户是给定主管ID的下属(每个用户条目都有一个主管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
    

    submission 有许多 submittedentries ,目前我正在使用时间戳引用这个。如果有人能提出更有效的建议,我会更愿意改变这一点。(是的,还有更多的字段我省略了)

    1 回复  |  直到 15 年前
        1
  •  2
  •   Greg W    15 年前

    如果列名称正确,那么应该从具有指定主管的用户那里获得提交列表。

    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%确定第二个版本是否正确,需要对数据库进行测试以找出:)

    在实践中,您可能应该将星号替换为要检索的实际列的名称。