我的数据库:
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 :(得分: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