2013-10-28 51 views
0

我有兩個表使用INNER JOIN出現在哪裏用戶信息頁面。 現在我需要創建另一張桌子,我無法將3張桌子一起做功能車。選擇3個表格並在其中

遵循舊代碼(有兩個表)和當前錯誤代碼(有三個表)。

OLD CODE:

// Pega subdomínio 
    $urlExplode = explode('.', $_SERVER['HTTP_HOST']); 
    if (count($urlExplode) > 2 && $urlExplode[0] !== 'www') { 
     $subdomain = $urlExplode[0];  
    // echo $subdomain; 
    }  

    // Diz que o usuário é igual ao subdomínio 
    $usuario = $subdomain; 

    // Select DB da Tabela TEXTOS 
$sql = "SELECT * FROM vms_textos i INNER JOIN vms_users u on u.id = i.id where u.usuario='$usuario'";  


     $result = mysql_query($sql); 
     if($result === FALSE) { 
     die(mysql_error()); 
     // TODO: better error handling 
     } 
    else { 
    $row = mysql_fetch_array($result); 

    // Tabela Textos 
    $userKeywords = $row['userKeywords']; 
    $userDesc = $row['userDesc']; 
    $userTitleSite = $row['userTitleSite']; 
    $userTextSobre = $row['userTextSobre']; 
    $userTextContatos = $row['userTextContatos']; 
    $userTextMaisInfos = $row['userTextMaisInfos']; 

    } 

當前代碼

// Pega subdomínio 
$urlExplode = explode('.', $_SERVER['HTTP_HOST']); 
if (count($urlExplode) > 2 && $urlExplode[0] !== 'www') { 
    $subdomain = $urlExplode[0];  
// echo $subdomain; 
} 


// Diz que o usuário é igual ao subdomínio 
$usuario = $subdomain; 

// Select DB da Tabela TEXTOS 
$sql = "SELECT * FROM (vms_textos t INNER JOIN vms_users u ON u.id = t.id) INNER JOIN vms_cores c ON u.id = c.id where u.usuario='$usuario'"; 


    $result = mysql_query($sql); 
    if($result === FALSE) { 
    die(mysql_error()); 
    // TODO: better error handling 
    } 
else { 
$row = mysql_fetch_array($result); 

// Tabela Textos 
$userKeywords = $row['userKeywords']; 
$userDesc = $row['userDesc']; 
$userTitleSite = $row['userTitleSite']; 
$userTextSobre = $row['userTextSobre']; 
$userTextContatos = $row['userTextContatos']; 
$userTextMaisInfos = $row['userTextMaisInfos']; 

} 

預先感謝您的幫助。

+0

看起來你可能需要以某種方式連接表'c'和't'?除此之外,在查詢中沒有出現任何問題。你得到什麼錯誤? – Fluffeh

+0

找不到用戶 –

+0

如果未找到用戶可能是因爲您正在加入連接子句的所有表上不存在的數據。 –

回答

0

聽起來像你需要使用一個外連接,而不是再(從評論)

SELECT 
    * 
FROM 
    vms_textos t 
     INNER JOIN vms_users u 
      ON u.id = t.id 
     left outer JOIN vms_cores c 
      ON u.id = c.id 
where 
    u.usuario='$usuario' 

基本上,採用內部連接,如果數據不存在於所有的表,它不會被返回。使用內部/外部連接的組合,您可以確定需要恢復的內容。

基於下面的意見,而現在的查詢是:

SELECT 
    * 
FROM 
    vms_cores c 
     INNER JOIN vms_users u 
      ON u.id = t.id 
     left outer JOIN vms_textos t 
      ON u.id = c.id 
where 
    u.usuario='$usuario' 

它也可能是一個好主意,那read this Q&A I wrote進入這個答案中有更詳細的細節。

+0

加上解釋:什麼是saing是:給我所有的數據其中user_id同時存在於vms_users和vms_textos中,並且如果它是或不在vms_cores表中,則爲第一個表(連接)帶來的所有結果以及該用戶標識存在於第三個表中否則會出現第三個表的所有數據將顯示爲空 –

+0

@Fluffeh,找到表數據「vms_cores」但未找到表「vms_textos」... –

+0

所以你應該c把訂單命令掛起來。加入vms_users與vms_cores然後留下vms_textos加入 –

0

我從來不喜歡這個SQL 92模式我覺得很難看,所以,在這裏它是一個更簡單的方法來做到這一點:

$sql = "SELECT * FROM vms_textos t , 
         vms_users u , 
         vms_cores c 
        where u.id = t.id 
        and u.id = c.id 
        and u.usuario='$usuario'"; 
+0

也沒有找到用戶:( –

+0

聽起來像@Fluffeh答案更適合你,然後...這是一個左連接 –

+0

你剛剛沒有重新格式化他的查詢到ansi-89嗎? – Fluffeh

相關問題