使用SSP类的Datatables服务器端PHP-加入后如何分组

时间:2018-06-26 12:26:58

标签: postgresql datatables

我正在尝试找出如何在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语句的问题上。

2 个答案:

答案 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;
?>