2013-07-19 104 views
1

所以我擁有的很簡單。 我有1臺從數據庫中獲取數據的最有效方法

CategorieMain

CatMainid

CatMainName

和1臺:

CategorieSub

CATID

CatName

CatMainId

'

我要的是:

一個包含所有CatMainName名稱和所有CatSubNames名稱下的列表。

CatMainId1

所有CatSubNames與CatMainId1

CatMainId2

所有CatSubNames與CatMainId2

等等等等

目前我使用PHP來得到這樣

SELECT * from Categoriemain 

的數據和while循環我做

SELECT * FROM CategorieSub WHERE CatMain id = $row['CatMainId'] 

但是,這是非常低效的,因爲現在如果我有10級CatMainId的我做10個查詢的(每一段時間)

什麼是最有效的方式來得到這樣的列表,我正在考慮把它放在數組或什麼東西,但我不能得到它的工作?

+1

用於在while循環中實現查詢的+1是一件壞事':'' – Bojangles

+0

您想了解「SQL JOIN」。網絡上肯定會有一些很好的教程。 –

回答

0

使用一個查詢:

SELECT Categoriemain.*, CategorieSub.CatSubNames FROM Categoriemain 
JOIN CategorieSub ON Categoriemain.CatMainid=CategorieSub.Catmainid 

編輯,刪除GROUP BY

有了這個查詢,你不需要while循環。

我還將CatSubNames添加到查詢字段的輸出列表中。

+0

只給出1結果。 –

+0

好的,刪除了「GROUP BY」。如果您想更好地理解您的輸出,您還可以添加@Randy所示的ORDER BY。 – Sablefoste

0
SELECT * FROM Categoriemain 
JOIN CategorieSub ON Categoriemain.CatMainid=CategorieSub.Catmainid 
ORDER BY Categoriemain.CatMainid 
+0

確定,但我怎麼能在while循環的CatMainName下選擇合適的CategorieSub我可以用,而($行= $ result-> FETCH_ASSOC())獲得CatMainNames \t \t \t \t { \t \t \t \t \t \t \t \t \t \t echo $ row ['CatMainName']; \t \t \t \t} –

+1

有變量,你將存儲目前主要類別,然後你做一個檢查,看是否該類別發生了變化,如果有,你只需創建一個新的HTML部分或標題,並給變量新的價值,只是一個建議,你會更好,如果這可以用SQL來完成,有什麼建議嗎? –

+0

對一行重複部分的抑制可以使用WINDOW函數完成 - 但我不確定這是否可用於mysql - 這在Oracle和其他平臺中是肯定的。 @Hosea Kambonde建議,我認爲最簡單的方法是在顯示代碼中刪除不需要的重複 – Randy

相關問題