0

INNER JOIN を使用した 2 つのテーブルがあり、ユーザー情報ページが表示されます。別のテーブルを作成する必要がありましたが、3 つのテーブルを一緒に使用して funcioncar を実行できません。

古いコード (表が 2 つ) に従い、エラーのある現在のコードの下 (表が 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'];

}

よろしくお願いいたします。

4

2 に答える 2

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'";
于 2013-10-28T03:28:56.733 に答える
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'

また、私が書いたこのQ&Aを読んで、この回答の詳細を詳しく説明することをお勧めします。

于 2013-10-28T03:31:40.893 に答える