I'm working on a simple CMS system for which I have a database with the following tables:
Items
Contents
Langs
The Items
table has the following structure:
itemId
name (for semantic reasons)
type
parent (foreign key to itemId)
An item can be either a document
or a section
type. A section is a piece of content on a document which is linked to it via the parent collumn. But also a document can have a parent which makes it a subpage
.
Now I get stuck on making a query to fetch all the items from the database hierarchically. So something like this:
documentId => name
metaDescription => language => meta
sections => sectionId => language => title
content
uri
subPages => documentId => name
metaDescription
sections => etc...
Just to clarify, a website can have multiple languages which are in the Langs
table and every language is linked to a piece of content in the Contents
table which is also linked to an item in the Items
table. The metaDescription
is the linked content
collumn linked to a item of type document
.
Is there a way to do this with one query? This was my first attempt, but it doesnt work for subPages:
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
Sorry for the long question. Hope you guys can help!