对多个连接语句的结果进行排序的最佳方法

时间:2014-01-05 22:32:37

标签: php mysql

我不确定我的问题的最佳答案是在php中找到还是我如何组织我的结果。我将我的网站页面在数据库中以三个表页面,组件,脚本进行组织。我用这样的语句选择页面数据:

SELECT pages.id AS pageID, pages.view AS pageView, pages.accessLev, scripts.scriptPath, components.componentPath
FROM  `pages`
LEFT OUTER JOIN scripts
ON scripts.page_id = page.id
LEFT OUTER JOIN components
ON components.page_id = pages.id
WHERE pgs.pageName = 'home'

这些页面包含不同数量的脚本和组件,多个一对多的关系。

如果一个页面有两个脚本和一个组件,我会在每个脚本的结果中得到两行。

pageID  pageView  accessLev  scriptPath  componentPath

2       homeView  0          script1     component1
2       homeView  0          script2     component1

如果它有2个组件我得到4行:,

pageID  pageView  accessLev  scriptPath  componentPath

2       homeView  0          script1     component1
2       homeView  0          script1     component2
2       homeView  0          script2     component1
2       homeView  0          script2     component2

我的问题我猜是以太最好如何订购mysql的结果,或者我应该使用php来处理结果的组织。

1 个答案:

答案 0 :(得分:2)

如果您希望每页有一个结果,则必须将查询更改为以下内容:

SELECT 
    `pages`.id AS pageID, 
    `pages`.view AS pageView, 
    `pages`.accessLev, 
    GROUP_CONCAT(`scripts`.scriptPath SEPARATOR ',') AS scriptsPath, 
    GROUP_CONCAT(`components`.componentPath SEPARATOR ',') AS componentsPath
FROM `pages`
LEFT OUTER JOIN `scripts`
ON `scripts`.page_id = `pages`.id
LEFT OUTER JOIN `components`
ON `components`.page_id = `pages`.id
WHERE `pages`.pageName = 'home'
GROUP BY `pages`.id