2013-07-19 4 views
1

Так что у меня есть довольно просто. У меня есть 1 столСамый эффективный способ получить данные из базы данных

CategorieMain

как

CatMainid

CatMainName

и 1 стол:

CategorieSub

как

CatID

CatName

CatMainId

'

Что я хочу:

Список со всеми именами CatMainName и под именами всех CatSubNames.

CatMainId1

все CatSubNames с CatMainId1

CatMainId2

все CatSubNames с CatMainId2

Etc Etc

В настоящее время я использую PHP, чтобы получить данные, как

SELECT * from Categoriemain 

и в цикле пока я

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

Но это очень неэффективно, потому что теперь, если у меня есть 10 CatMainId, я сделать 10 запросов (для каждого один раз)

Каков наиболее эффективный способ получить такой список, я думал о том, чтобы поместить его в массивы или что-то в этом роде, но я не мог заставить его работать?

+1

+1 для реализации запросов в цикле while - это плохая вещь ':)' – Bojangles

+0

Вы хотите узнать о "SQL JOIN". В Интернете обязательно будут хорошие учебные пособия. –

ответ

0

Используйте один запрос:

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

Edited, удалены GROUP BY

С помощью этого запроса, вам не нужно время цикла.

Я также добавил CatSubNames в выходной список полей запроса.

+0

всего 1 баллов. –

+0

Хорошо, удалил 'GROUP BY'. Вы также можете добавить 'ORDER BY', как показано @Randy, если вы хотите больше узнать о своем выходе. – Sablefoste

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

Хорошо, но как я могу выбрать правильный CategorieSub под CatMainName в цикле, пока я могу получить CatMainNames с в то время как ($ строки = $ result-> FETCH_ASSOC()) \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

Смежные вопросы