如何查询关系Table中的所有结果?

How query all results in a Relational Table?

在一个查询中,我 SELECT 来自书籍 Table 的特定产品数据。像标题、作者、年份等。我想得到它的所有作者,但它 只显示 第一个 .

产品Table:

produto
   idproduto
   sku
   titulo
   others not important

作者 Table:

autor
   id_autor
   nome_autor

关系型 Table:

    autorxprod
        idautoria
        idprod (FK)
        idautor (FK)

如何显示与 Book1 相关的所有作者?? 我应该在主 QUERY 中创建另一个 QUERY 吗??


用代码编辑。我评论了一点,因为它是用葡萄牙语写的

$produto = $_GET['sku']; 
$idproduto = $_GET['idprod'];

$query = "SELECT 

p.titulo AS titulo, p.imgprod AS imgprod, p.marca AS idmarca, p.sku AS sku,
p.prodcateg AS prodcateg, p.ano AS ano, p.titeng AS titeng,
p.codbarra AS codbarra, p.desc AS descricao, // product infos

c.idcategoria AS idcategoria, c.nomecateg AS nomecateg, // category infos
m.nome_marca AS nome_marca, // brand info

a.nome_autor AS nome_autor, // author info
a.id_autor AS idautor   // author id

FROM (produto p, autor a)

   LEFT JOIN categoria c // category join
   ON p.prodcateg = c.idcategoria

   LEFT JOIN marcas m // brand join
   ON p.marca = m.id_marca  

   LEFT JOIN autorxprod axp // relational table
   ON p.idproduto = axp.idprod
   AND a.id_autor = axp.idautor


   WHERE p.sku LIKE '$produto'";

   $result = $conn ->query ($query);


if (!$result) die ($conn->error);

$rows = $result->num_rows;  

    for ($j = 0; $j <$rows; ++$j)
    {
        $result -> data_seek($j);
        $row = $result->fetch_array (MYSQLI_ASSOC);?>

 -----------

 <?php echo $row['nome_autor']?>

我不认为这是错误的,但是您的 sql 在混合连接样式方面有点奇怪。我可以建议这个吗:

SELECT 
  p.titulo AS titulo, p.imgprod AS imgprod, p.marca AS idmarca, p.sku AS sku,
  p.prodcateg AS prodcateg, p.ano AS ano, p.titeng AS titeng,
  p.codbarra AS codbarra, p.desc AS descricao, // product infos

  c.idcategoria AS idcategoria, c.nomecateg AS nomecateg, // category infos
  m.nome_marca AS nome_marca, // brand info

  a.nome_autor AS nome_autor, // author info
  a.id_autor AS idautor   // author id

FROM produto p
LEFT JOIN categoria c  ON p.prodcateg = c.idcategoria
LEFT JOIN marcas m  ON p.marca = m.id_marca  
LEFT JOIN autorxprod axp ON p.idproduto = axp.idprod
JOIN autor a ON a.id_autor = axp.idautor
-- above is what your code did, you could also use a left join like this and you might have null authors
-- LEFT JOIN autor a ON a.id_autor = axp.idautor
WHERE p.sku LIKE '$produto'

我可能弄错了,但在我看来,您可能想要 运行 两个单独的查询。一个查询获取与搜索相匹配的书籍,第二个查询获取该书的所有作者。因为关系 table 是多对一的,所以如果您尝试加入 table s,您最终会得到一个结果集,其中多次列出同一本书,每个作者一个。那是你想要的吗?

如果我弄错了,而您确实希望每本书有多个记录,这里是您需要的连接查询的简化版本。

SELECT 
 p.titulo AS titulo
 a.nome_autor
FROM 
 author a,
 produto p
 LEFT JOIN autorxprod axp
 ON  axp.idprod =p.idproduto 
WHERE 
 p.sku LIKE '$produto'
 AND  axp.idautor = a.id_autor

感谢所有耐心等待我的人,因为我正在学习我真的迷路了。 这是我需要的完成结果,它按预期工作。 比以前简单多了。

此代码获取相关产品的所有作者并显示为作者 1、作者 2、作者 3...

"SELECT     
            ....get stuff...

            a.id_autor AS idautor,
            GROUP_CONCAT(DISTINCT a.nome_autor ORDER BY a.nome_autor SEPARATOR ', ') AS autor_list


        FROM 

        produto p

        LEFT JOIN categoria c
        ON p.prodcateg = c.idcategoria  

        LEFT JOIN marcas m
        ON p.marca = m.id_marca     

        LEFT OUTER JOIN (autor a, autorxprod axp)
        ON axp.idautor = a.id_autor AND
        axp.idprod = '$produto'


        WHERE
        p.sku = '$produto'