SQL Получить несколько значений в один столбец через запятую - PullRequest
0 голосов
/ 18 мая 2018

Нужна помощь в этом SQL-запросе.Узел представляет собой таблицу продуктов, и каждый продукт имеет n изображений в таблице field_data_field_images.Мне нужно выбрать все эти имена файлов изображений в один столбец, разделенный запятой (например, «image1.jpg, image2.jpg» и т. Д.).Итак, сначала мне нужно получить все идентификаторы изображения из field_data_field_images, а затем получить имена файлов непосредственно из file_managed.

SELECT node.*,
file_managed.filename,
field_data_field_product_code.field_product_code_value,
FROM node

LEFT JOIN field_data_field_images ON node.nid = field_data_field_images.entity_id
LEFT JOIN file_managed ON field_data_field_images.field_images_fid = file_managed.fid

WHERE node.language = 'lt' AND node.type = 'products'
GROUP BY nid

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

ЕСЛИ MS-SQL следует приведенному ниже коду:

 DECLARE @TableVar TABLE
 (
  nid INT ,
  images NVARCHAR(400)
 );
 INSERT INTO @TableVar
    ( nid ,
      images
    )
    SELECT nid,images

FROM node

LEFT JOIN field_data_field_images 
ON node.nid =     field_data_field_images.entity_id
LEFT JOIN file_managed 
ON field_data_field_images.field_images_fid =   file_managed.fid

WHERE node.language = 'lt' AND node.type = 'products'
GROUP BY nid

SELECT DISTINCT
    nid ,
    STUFF(( SELECT  ',' + images
            FROM    @TableVar AS T
            WHERE   T.nid = T2.nid
          FOR
            XML PATH('')
          ), 1, 1, '') AS images
 FROM   @TableVar T2
 GROUP BY nid ,
    images 
0 голосов
/ 18 мая 2018

Вы можете использовать group_concat().Следующий запрос также вводит псевдонимы таблиц, чтобы их было легче писать и читать:

SELECT n.*,
       GROUP_CONCAT(fm.filename) as filenames
FROM node n LEFT JOIN
     field_data_field_images dfi
     ON n.nid = dfi.entity_id LEFT JOIN
     file_managed fm
     ON dfi.field_images_fid = fm.fid
WHERE n.language = 'lt' AND n.type = 'products'
GROUP BY n.nid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...