gpt4 book ai didi

php - 如何分解由 group_concat[distinct] 合并的值?

转载 作者:行者123 更新时间:2023-11-29 03:41:36 25 4
gpt4 key购买 nike

我有两张 table 。每个产品可以有一个或多个文件。但每个文件必须属于一个产品。

**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 单元格吗?如果是,请尝试用一段代码来解释?

最佳答案

看起来你快到了!

你只需要在 file_path 上做一个 GROUP_CONCAT;

SELECT products.*,
GROUP_CONCAT(DISTINCT product_files.file_name ORDER BY product_files.id SEPARATOR ',') AS file_name,
GROUP_CONCAT(DISTINCT product_files.file_path ORDER BY product_files.id SEPARATOR ',') AS file_path
FROM products
INNER JOIN product_files
ON products.id = product_files.product_id
GROUP BY products.id;

并且,为了安全起见,对 GROUP_CONCAT-ed file_name 和 file_path 进行排序,以便它们处于相应的顺序。

你可以展开 file_name 或 file_path 并循环遍历每个数组 - 以获取文件路径对(它们将位于每个数组中的相同位置)。

关于php - 如何分解由 group_concat[distinct] 合并的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com