2016-06-14 116 views
-1

我的數據庫:INNER JOIN返回什麼

CREATE TABLE EXPERIENCIA(
    exp_pri INT NOT NULL AUTO_INCREMENT, 
    nome VARCHAR(150), 
    email VARCHAR(50),  
    exp VARCHAR(100), 
    PRIMARY KEY(exp_pri) 
); 

CREATE TABLE PRANCHA(
    prancha_pri INT NOT NULL AUTO_INCREMENT,  
    tamanho_prancha VARCHAR(8), 
    meio_prancha VARCHAR(2), 
    litragem_prancha VARCHAR(3), 
    PRIMARY KEY (prancha_pri) 
); 

CREATE TABLE ALTURAPESOESTILO(
    idAltPes INT NOT NULL AUTO_INCREMENT, 
    idExp INT, 
    idPrancha INT, 
    altura VARCHAR(4), 
    peso VARCHAR(3), 
    estilo VARCHAR(15), 
    primary key (idAltPes), 
    constraint fk_idExp foreign key (idExp) references EXPERIENCIA (exp_pri), 
    constraint fk_idPrancha foreign key (idPrancha) references PRANCHA (prancha_pri) 
); 

我的SQL:

$query = "SELECT EXP.exp, 
      AEP.altura, 
      AEP.peso, 
      AEP.estilo, 
      PRAN.tamanho_prancha, 
      PRAN.meio_prancha, 
      PRAN.litragem_prancha 
    FROM EXPERIENCIA AS EXP 
    INNER JOIN ALTURAPESOESTILO AS AEP 
    ON (EXP.exp_pri = AEP.idAltPes) 
    INNER JOIN PRANCHA AS PRAN 
    ON (PRAN.prancha_pri = AEP.idAltPes)"; 

$resultado = mysqli_query($conexao,$query); 

$retorno = array(); 

while($experiencia = mysqli_fetch_assoc($resultado)){ 
    $retorno[] = $experiencia; 
} 

return $retorno; 

}

的index.php

include 'banco.php'; 

    $resultado = array(); 
    $resultado = BuscaAlgo($conexao); 


    foreach($resultado as $valor) 
    { 
     echo $valor['exp']; print(' '); echo $valor['altura']; print(' '); echo $valor['peso']; 
     echo $valor['estilo']; print(' '); echo $valor['tamanho_prancha']; print(' '); echo $valor['meio_prancha']; 
     print(' '); echo $valor['litragem_prancha']; ?><br> <?php 
    } 

我加入三桌,並試圖以顯示它們。但是,兩者都直接放在MySql中,就像我的代碼一樣,沒有任何東西被返回。它沒有錯誤,但沒有顯示。

它可能是什麼?

+0

請給輸入,輸出和預期輸出,當你運行你的查詢。閱讀[mcve] s。 PS您只請求EXP.exp_pri = PRAN.prancha_pri = AEP.idAltPes的三個表的交叉乘積的行。那是你要的嗎? – philipxy

回答

0

您已要求只有三個表的交叉乘積的行,其中

EXP.exp_pri = PRAN.prancha_pri = AEP.idAltPes 

那是你真正想要的?你還沒有告訴我們你的表格是什麼意思。但是,您的AEPidAltPes值應該與其他列中的值相等似乎不太可能。如果它們不相等,則不會返回任何行。考慮到你的外鍵的聲明,可能不是你想要的:

AEP.idExp = EXP.exp_pri AND AEP.idPrancha = PRAN.exp_pri 

所以

FROM ALTURAPESOESTILO AEP 
INNER JOIN EXPERIENCIA EXP 
ON (EXP.exp_pri = AEP.idExp) 
INNER JOIN PRANCHA PRAN 
ON (PRAN.prancha_pri = AEP.idPrancha) 
1

INNER JOIN是獨佔的,並且需要在兩個表中匹配非空值。我注意到你已經在前三張表中定義了外鍵關係。

有沒有在INNER JOIN中使用外鍵約束列的原因?該約束將確保在主表和從屬表中匹配非空值。