如何查询关系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'
在一个查询中,我 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'