MySQL使用标题来分类类别

时间:2014-01-03 17:46:16

标签: php mysql

对不起,如果标题错了,我想不出有办法正确说出来。这是我遇到的问题,希望有人可以帮我解决问题。我有一个从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的基础上将它们连接到数组中。我不认为这是我正在寻找的路线,因为它没有正确回应。任何想法或帮助将不胜感激!

1 个答案:

答案 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