内部加入什么都没有

时间:2016-06-14 14:50:44

标签: database foreach 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中,没有返回任何内容。它没有错误,但没有显示任何内容。

它有什么用?

2 个答案:

答案 0 :(得分:1)

INNER JOIN是独占的,需要在两个表中匹配非空值。我注意到您已在第三个表中使用前两个表定义了外键关系。

是否有理由不在INNER JOIN中使用外键约束列?约束将确保在主表和从属表中匹配非空值。

答案 1 :(得分:0)

您只询问了三个表格的交叉积的行

crontab

这是你真正想要的吗?你还没告诉我们你的桌子是什么意思。但是,您的EXP.exp_pri = PRAN.prancha_pri = AEP.idAltPes AEP值应该与其他列中的值相等,似乎极不可能。如果它们不等于任何值,则不会返回任何行。考虑您的外键声明,可能需要:

idAltPes

所以

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