2
我有兩個表。每個產品可以有一個或多個文件。但每個文件都必須屬於一個產品。如何分解由group_concat [distinct]合併的值?
**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單元?如果是,請嘗試用一段代碼解釋?