2014-01-05 52 views
0

我不確定是否在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個compontents我得到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處理結果的組織。

+0

你應該做它最適合你的方式。 :-) – Strawberry

+0

我一直在想,我一定在做錯事,因爲我有重複的結果 – John

+0

但是,爲什麼這是錯的? – Strawberry

回答

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 
+0

你*可以*做這樣的事情,但肯定有*必須*關於它! ;-)個人而言,我認爲GROUP_CONCAT(和CONCAT)是一個愚蠢的功能,應該避免! – Strawberry

+0

你爲什麼覺得他們應該避免? – John

相關問題