在QUERY中,我从Book Table中选择了一个特定的产品数据。喜欢标题,作者,年份等。我想得到它的所有作者,但只显示 第一个。
产品表:
produto
idproduto
sku
titulo
others not important
作者表:
autor
id_autor
nome_autor
关系表:
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']?>
答案 0 :(得分:1)
感谢所有患者,因为我正在学习,我真的迷失了。 以下是我需要的完整结果,并且它按预期工作。 比以前简单得多。
此代码从相关产品中获取所有作者,并显示为作者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'
答案 1 :(得分:0)
我不相信这是错的,但是你的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'
答案 2 :(得分:0)
我可能会弄错,但在我看来,你想要运行两个单独的查询。获取与搜索匹配的Book的第二个查询和获取该书的所有作者的第二个查询。因为关系表是多对一的,所以如果您尝试连接表,则最终会得到一个多次列出相同书籍的结果集,每个作者一个。这就是你想要的吗?
如果我弄错了,你确实想要每本书有多个记录,这里是你需要的简化版连接查询。
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