连接查询遇到问题

时间:2018-08-20 21:23:52

标签: php mysqli

我有一个名为dogs的表,其中有以下行

dog_id(主要)

狗名

父亲

dam

对于狗的父亲或母亲,我输入与狗的名字有关的dog_id。 我正在尝试通过dog_id行列出一条狗的父亲和母亲。 但是,当我运行查询时,它不会仅显示dog_id来显示dog_name。

对此将有任何帮助。

<?php 
$query = "SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam 
          FROM dogs 
          JOIN dogs pedigree";
$get_pedigree = mysqli_query($connection,$query);
while ($row_dog = mysqli_fetch_assoc($get_pedigree))
$sire   = $row['sire'];
$dam   = $row['dam']; 
?>

2 个答案:

答案 0 :(得分:1)

您需要添加一个ON子句,以使SQL知道如何链接表。

例如

SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam 
FROM dogs 
JOIN pedigree ON pedigree.dog_id = dogs.dog_id

也可以通过使用JOIN而不是说LEFT JOIN来获得结果,前提是两个表都具有匹配的ID。

更新后的响应;

如果父亲和母亲是自引用ID,则应该可以;

SELECT dogs.dog_id, 
       dogs.dog_name, 
       father.dog_id AS father_dog_id, 
       father.dog_name AS father_dog_name, 
       mother.dog_id AS mother_dog_id, 
       mother.dog_name AS mother_dog_name 
FROM dogs 
LEFT JOIN dogs AS father ON father.dog_id = dogs.sire
LEFT JOIN dogs AS mother ON mother.dog_id = dogs.dam

答案 1 :(得分:1)

您的语法已关闭,您需要一个on子句,以便它知道两个表之间的关系。

SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam 
FROM dogs
JOIN pedigree
on dogs.dog_id = pedigree.dog_id

我假设pedigree也有一个dog_id?

如果两个表使用相同的列名,则on的替代项可以是using

using(dog_id)

好的,使用更新的描述,您可以执行以下操作来获取父母的姓名。

select group_concat(parents.name), dog.id, dog.name 
from dogs as dog
left join dogs as parents
on dog.mom = parents.id or dog.dad= parents.id
group by dog.id

或者如果您需要两个列都独立,则可以执行上面的双重联接。

http://sqlfiddle.com/#!9/8c548/5