Я работаю над простой системой CMS, для которой у меня есть база данных со следующими таблицами:
Items
Contents
Langs
Таблица Items
имеет следующую структуру:
itemId
name (for semantic reasons)
type
parent (foreign key to itemId)
Элемент может быть типа document
или section
. Раздел — это часть содержимого документа, которая связана с ним через родительский столбец. Но также у документа может быть родитель, что делает его subpage
.
Теперь я застрял на выполнении запроса для извлечения всех элементов из базы данных иерархически. Что-то вроде этого:
documentId => name
metaDescription => language => meta
sections => sectionId => language => title
content
uri
subPages => documentId => name
metaDescription
sections => etc...
Просто чтобы уточнить, веб-сайт может иметь несколько языков, которые находятся в таблице Langs
, и каждый язык связан с частью контента в таблице Contents
, которая также связана с элементом в таблице Items
. metaDescription
— это связанный столбец content
, связанный с элементом типа document
.
Есть ли способ сделать это одним запросом? Это была моя первая попытка, но она не работает для подстраниц:
SELECT
documents.itemId AS id,
documents.name AS documentName,
documents.lastModified AS lastModified,
meta.content AS metaDescription,
meta.uri AS documentUri,
sections.itemId AS sectionId,
sections.name AS sectionName,
sections.lastModified AS sectionLastModified,
contents.name AS sectionTitle,
contents.content AS sectionContent,
contents.uri AS contentUri,
contents.lastModified AS contentLastModified,
langs.name AS contentLang
FROM
SITENAME_kw_items AS documents
INNER JOIN
SITENAME_kw_contents AS meta
ON documents.itemId = meta.itemId
INNER JOIN
SITENAME_kw_items AS sections
ON sections.parent = documents.itemId
INNER JOIN
SITENAME_kw_contents AS contents
ON sections.itemId = contents.itemId
INNER JOIN
SITENAME_kw_langs AS langs
ON langs.langId = contents.langId
Извините за длинный вопрос. Надеюсь, вы, ребята, можете помочь!