我正在尝试找出如何在Datatables服务器端PHP脚本中对联接表中的数据进行分组。
PHP脚本使用为PostgreSQL连接修改的SSP类准备的数据表数据。
该表包含产品及其类别。
一切正常,但是我无法弄清楚如何准备SELECT语句以将每个产品的产品类别分组。
为使我的问题更容易理解,您可以在下面看到一个安装示例。
PostgreSQL数据库表结构:
Table: products_table
------------------------------------------
id | title | pr_template_id
------------------------------------------
1 | Product 1 | 1
2 | Product 2 | 2
3 | Product 3 | 3
------------------------------------------
Table: product_categories_template_relations
------------------------------------------
id | pr_template_id | category_id
------------------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3
5 | 3 | 1
------------------------------------------
Table: product_categories
------------------------------------------
category_id | title
------------------------------------------
1 | Category 1
2 | Category 2
3 | Category 3
------------------------------------------
服务器端脚本(PHP):
<?php
$table = <<<EOT
(
SELECT
a.id,
a.pr_template_id,
a.title as producttitle,
b.pr_template_id,
b.category_id,
c.title as cattitle
FROM products_table a
LEFT JOIN product_categories_template_relations b ON a.pr_template_id = b.pr_template_id
LEFT JOIN product_categories c ON b.category_id = c.category_id
) temp
EOT;
?>
当前数据表结果:
------------------------------------------
Product ID | Product title | Category
------------------------------------------
1 | Product 1 | Category 1
1 | Product 1 | Category 2
2 | Product 2 | Category 2
2 | Product 2 | Category 3
3 | Product 3 | Category 1
------------------------------------------
我正在寻找的数据表结果:
---------------------------------------------------------
Product ID | Product title | Category
---------------------------------------------------------
1 | Product 1 | Category 1, Category 2
2 | Product 2 | Category 2, Category 3
3 | Product 3 | Category 1
---------------------------------------------------------
因此,基本上,我目前停留在服务器端脚本(PHP)和如何正确制定SELECT语句的问题上。
答案 0 :(得分:0)
在PostgreSQL中,有string_agg
个函数(相当于MySQL GROUP_CONCAT
),可以从一组输入值中计算出一个结果。
SELECT id,
string_agg(some_column, ',')
FROM the_table
GROUP BY id
答案 1 :(得分:0)
正确的解决方法是:
<?php
$table = <<<EOT
(
SELECT
a.id,
a.pr_template_id,
a.title as producttitle,
b.pr_template_id,
b.category_id,
string_agg(DISTINCT c.title, ', ') as cattitle
FROM products_table a
LEFT JOIN product_categories_template_relations b ON a.pr_template_id = b.pr_template_id
LEFT JOIN product_categories c ON b.category_id = c.category_id
group by a.id, b.pr_template_id
) temp
EOT;
?>