2010-03-17 23 views
0

我目前使用下面的PHP代碼:關係MySQL - 獲取的屬性?

// 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 

一個submission有很多submittedentries,和我目前使用時間戳引用此我會更願意改變更多。這個如果有人可以建議更有效的方式(是的,有更多的領域,我省略)

+0

你可以在編輯中發佈數據庫模式嗎?至少有兩個查詢可以合併爲一個,但是您可能會將所有這三個查詢壓縮。儘管如此,很難猜測這些關係是什麼。 (並且從來沒有不好的時間開始學習) – tadamson 2010-03-17 03:22:09

回答

2

這應該,如果我得到的列名正確,獲得提交列表的用戶誰指定主管

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%確定第二個版本是否正確,需要根據數據庫進行測試以找出:)

哦,實際上,您應該用實際列的名稱替換星號你想要檢索。

+0

有人可能會指向任何文章解釋格雷格使用的語法,甚至條款谷歌? – kbanman 2010-03-17 04:04:05

+0

這是一個關於MySql「連接」的合適光照教程,或者是在一個查詢中組合多個表的行爲:http://www.tizag.com/mysqlTutorial/mysqljoins.php – 2010-03-17 04:08:43