2012-06-04 93 views
1

這是我的問題:我有3個表,每個表中有重疊的信息(具體來說,用戶名)。除了用戶名行在每個表中沒有被命名爲相同的東西。由於用戶名是特定於用戶的,因此根據用戶名獲取有關用戶的所有其他信息是有意義的。這是我的。 (第一個函數返回的查詢,第二個函數以數組形式返回的信息(或者應該是,反正)。使用來自多個表的數據

function get_user_by_id($id) { 
    global $connection; 
    $query = "SELECT * FROM ownerOrganization, owner, queue_acl"; 
    $query .=" WHERE owner.ownerId=ownerOrganization.ownerId"; 
    $query .=" AND owner.ownerId=queue_acl.user_id"; 
    $query .= " AND owner.ownerId ='{$id}'"; 
    $result_set = mysql_query($query); 
    confirm_query($result_set); 
    if ($user = mysql_fetch_array($result_set)) { 
     return $user; 
    } else { 
     return NULL; 
    } 
} 

function get_user_id() { 
    if (isset($_GET['ownerId'])) { 
     return get_user_by_id($_GET['ownerId']); 
    } 
} 

但是,當我在另一頁上做這樣的事情,$sel_user = get_user_id();,它實際上並沒有拉起任何選定的用戶信息...我認爲這是因爲我的關於使用多個表的語法是錯誤的,無論如何,任何輸入將不勝感激

+0

請發佈樣本數據和期望的輸出。 – RedFilter

+0

是這些表中的'ownerId' /'user_id'唯一鍵嗎?這些表中的每個表是否有每個用戶的數據? – wroniasty

+0

建議您閱讀如何使用JOIN。 –

回答

0

要使用JOINS, :

$query = "SELECT * FROM (ownerOrganization INNER JOIN owner ON owner.ownerId=ownerOrganization.ownerId) INNER JOIN queue_acl ON owner.ownerId=queue_acl.user_id"; 
$query .=" WHERE owner.ownerId ='{$id}'"; 

Regards

+0

使用'內部連接'將導致行中無連接表中沒有數據的結果...當然,他想要這樣嗎? – shadyyx

+0

這只是*他的第一個查詢的等價性。由於我們不知道「先前」數據在哪裏,我們無法定義它是左或右連接。我用它來認爲FULL JOIN太昂貴了...... – MTranchant

0

我正在輸入什麼或多或少@MTranchant寫道。我會建議重命名您的列以方便查詢創作並避免混淆。例如,您的ownerOrganization.ownerid可以被命名爲oo_ownerid,並且表中的其他列可以遵循該命名約定。

此外,你有一個硬編碼的$ ID,你知道存在的數據庫運行查詢?

最後,在發送到下一頁的查詢字符串中,ownerId參數是否顯示爲「& ownerId =」?