Создайте SQL-запрос для получения данных в форме строки (имя всех продуктов в строке перед одной категорией)

Необходимо создать SQL-запрос

У меня есть два стола

tbl_cat
_________________
cat_id | cat_name
tbl_pro
__________________________
pro_id | pro_name | cat_id

теперь мне нужны данные в виде строки

например

category name | pro name 1 | pro name 2 | pro name 3

ИЛИ

Category name | pro name 1 , pro name 2 , pro name 3

мой запрос

SELECT ct.cat_name,
       cp.proname
FROM tbl_cat ct
JOIN tbl_pro cp
WHERE ct.cat_id=cp.cat_id;

и это показывает результат, как это

_____________________________
cat Name | Pro Name 
cat Name | Pro Name 1 
cat Name | Pro Name 2 
Метки

3 ответа

  1. $result = mysql_query"
    SELECT tbl_cat.CatName, tbl_pro.ProName1, tbl_pro.ProName2, tbl_pro.ProName3
    FROM tbl_cat
    LEFT JOIN tbl_pro
    ON tbl_cat.cat_id=tbl_pro.cat_id
    ";
    
    while($row = mysql_fetch_array($result)) {
     echo "Category: " . $row[CatName] . " Product1: " . $row[ProName1] . " Product2: " . $row[ProName2] . " Product3: " . $row[ProName3];
    }
    
  2. Если вы используете sqlserver2008 R2 или выше попробуйте это:

    select ct.cat_name,
        STUFF(
                 (SELECT DISTINCT ',' + cp.pro_name
                  FROM tbl_pro cp INNER JOIN tbl_cat ci on ci.cat_id=cp.cat_id
                  where ci.cat_id = ct.cat_id                 
                  FOR XML PATH (''))
                  , 1, 1, '')  AS ProductList
        FROM tbl_cat ct
        GROUP BY ct.cat_name,ct.cat_id
    
  3. Вы не указали свою СУБД, поэтому это для Postgres:

    SELECT ct.cat_name, string_agg(cp.proname, ',')
    FROM tbl_cat ct
      JOIN tbl_pro cp ON ct.cat_id=cp.cat_id
    GROUP BY ct.cat_name
    ORDER BY ct.cat_name;