对不起,如果标题错了,我想不出有办法正确说出来。这是我遇到的问题,希望有人可以帮我解决问题。我有一个从cms表中检索的SQL调用。我想输出CMS类别名称并列出页面上该类别下的页面。例如:
Home
Page One
Page Two
Page Three
Contact
Page One
Page Two
Page Three
以下是我的表格使用上面的内容
cms
id_cms | id_cms_category | position | active
1 | 1 | 1 | 1
2 | 1 | 1 | 1
3 | 1 | 1 | 1
4 | 2 | 2 | 1
5 | 2 | 2 | 1
6 | 2 | 2 | 1
cms_category_lang
id_cms_category | name | description
1 | Home | NULL
2 | Contact | NULL
cms_page_lang
id_cms | title | content
1 | Page One | Test Content 1
2 | Page Twi | Test Content 2
3 |Page Three| Test Content 3
4 | Page One | Test Content 4
5 | Page Two | Test Content 5
6 |Page Three| Test Content 6
我尝试了几个查询来尝试完成此操作,但似乎无法正常工作。
我试图先查询标题,然后我的结果会返回一个数组
SELECT * FROM cms_category_lang
array 0 =>
'id_cms_category' = 1
'name' = Home
'description' = ''
1 =>
'id_cms_category' = 2
'name' = Contact
'description' = ''
然后我查询了cms_page_lang并获得了一个类似的数组,但是使用该表中的值,我尝试在id_cms_category的基础上将它们连接到数组中。我不认为这是我正在寻找的路线,因为它没有正确回应。任何想法或帮助将不胜感激!
答案 0 :(得分:1)
看看这个sqlFiddle
我认为这会给你想要的结果。如果希望每个cms_page_lang都在自己的行上,则可以删除GROUP_CONCAT函数
SELECT
ccl.name
,GROUP_CONCAT(cpl.title)
FROM cms
LEFT JOIN cms_category_lang AS ccl
ON cms.id_cms_category = ccl.id_cms_category
LEFT JOIN cms_page_lang AS cpl
ON cms.id_cms = cpl.id_cms
GROUP BY ccl.name