我有两张桌子。每个产品可以有一个或多个文件。但是每个文件必须属于一个产品。
**PRODUCTS**
ID PRODUCT_CODE DESCRIPTION
1 a1 small
2 a2 big
**PRODUCT_FILES**
ID PRODUCT_ID FILE_PATH FILE_NAME
1 1 x.pdf x
2 1 y.pdf y
3 2 z.pdf z
我想要一张桌子,其中包括
PRODUCT_ID, PRODUCT_CODE, DESCRIPTION, FILE_NAME(s), FILE PATH(s)
我的查询是;
$query = $this->db->query
("
SELECT products.*,product_files.file_name
FROM products
INNER JOIN product_files
ON products.id = product_files.product_id
GROUP BY products.id
");
$i = 0;
while($row = $query->fetch_assoc())
{
$details[] = array
(
'code' => $row['code'],
'description' => $row['description'],
'file_name' => $row['file_name'],
'file_path' => $row['file_path']
);
}
return $details;
我的php是;
<?php foreach($details AS $product) { ?>
<tr>
<td><?php echo $product['code']; ?></td>
<td><?php echo $product['description']; ?></td>
<td><a href="files/<?php echo $product['file_path']; ?>">
<?php echo $product['file_name']; ?></a></td>
</tr>
<?php } ?>
但是使用此查询和 php,产品行会复制哪个产品具有多个文件,例如;
a1 small x x.pdf
a1 small y y.pdf
a2 big z z.pdf
而不是我尝试使用相同的php代码进行另一个查询;
$query = $this->db->query
("
SELECT products.*,
GROUP_CONCAT(DISTINCT product_files.file_name SEPARATOR ',')
AS file_name,product_files.file_path
FROM products
INNER JOIN product_files
ON products.id = product_files.product_id
GROUP BY product.id
");
结果是;
a1 small x,y x.pdf,y.pdf (linked with x.pdf's path)
a2 big z z.pdf
我现在必须分解 product_files 单元格吗?如果是,请尝试用一段代码解释一下?