选择3个表和位置


Select with 3 tables and where

我有两个使用INNER JOIN的表出现在用户信息页面的位置。现在我需要创建另一个表,但我无法将 3 个表放在一起进行功能。

遵循旧代码(包含

两个表),并在当前代码下方出现错误(包含三个表)。

旧代码:

 // 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'];
}

提前感谢您的帮助。

听起来你需要使用外部连接而不是(来自评论)

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'

阅读我写的这个问答也可能是一个好主意,它更详细地详细介绍了这个答案的细节。

我从不喜欢这种 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'";