Datatables на стороне сервера PHP с использованием класса SSP - как группировать после объединения - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь выяснить, как группировать данные из объединенной таблицы в PHP-скрипте на стороне сервера Datatables.

Данные для таблиц данных подготовлены сценарием PHP с использованием класса SSP, модифицированного для соединения postgreSQL.

Таблица состоит из продуктов и их категорий.

Все работает хорошо, но я не могу понять, как подготовить оператор 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;
?>

Текущие результаты Datatables:

------------------------------------------
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 голосов
/ 27 июня 2018

Правильное решение:

<?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;
?>
0 голосов
/ 26 июня 2018

В PostgreSQL есть функция string_agg (эквивалент MySQL - GROUP_CONCAT), которая может вычислять один результат из набора входных значений.

SELECT id, 
   string_agg(some_column, ',')
FROM the_table
GROUP BY id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...