Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (1)
  • Как выбрать все родительские категории в одну колонку?

    @Deltas
    Набросал некоторые примеры, приближенные к описанной задаче.
    Постановка задачи не полная (модель, форматы данных, сортировка, критерии отбора, какая СУБД - ничего не описано), но суть думаю реализовал. + обратите внимание на ответ Руслан ., там информации уже достаточно для реализации. + Полезно прочитать как "Вычисление рекурсивного запроса" например в документации Postgre

    Демонстрационный "расширенный" пример см. по ссылке + укороченный и чуть скорректированный под ваш пример вариант кода на Postgre ниже
    with recursive cte(id, title, url, hierarchy) as (
    
    	SELECT 
    		id,
    		title,
    		url,
    		null::text as hierarchy
    	from 
    		site_resources
    	where 
    		parent = 0
    		--and published = 1 AND template = 10 --В условиях задачи не сказано про эти критерии, но в примере они есть. Раскомментить, если нужно
    	
    	union all
    	
    	SELECT 
    		sr.id,
    		sr.title,
    		sr.url,
    		coalesce(cte.hierarchy || ', ', '') || sr.title
    	from 
    		cte
    	inner join
    		site_resources as sr on
    			cte.id = sr.parent
    			--and sr.published = 1 AND sr.template = 10 --Аналогично комменту выше + если надо так отфильтровать только корневые элементы, то вся эта строка тут не нужна
    
    )
    SELECT 
      sr.title                        		as 'Название',
      sr.url 				        as 'Урл',
      sr.hierarchy                    		as 'Иерархия',
      coalesce(meta1.value, sr.title) 		as 'Title',
      coalesce(meta2.value, sr.description) as 'Description'
    FROM 
      cte as sr
    LEFT JOIN `site_extrafields` meta1 ON meta1.resid = sr.id AND meta1.fieldid = 4
    LEFT JOIN `site_extrafields` meta2 ON meta2.resid = sr.id AND meta2.fieldid = 5;
    Ответ написан
    Комментировать