У меня есть сайт, который содержит уроки игры на гитаре и упражнения, разбитые по категориям. Таким образом, вы можете иметь категорию scales
. Затем урок scales lesson1
, который может содержать exercise1_1
, exercise1_2
. Аналогично для других категорий и занятий с упражнениями.Как получить иерархические данные родитель-ребенка, связанные несколькими таблицами?
Уроки и упражнения считаются узлами (это сайт Drupal). Таким образом, есть таблица узлов, в которой есть идентификаторы узлов, тип узла (урок или упражнение) и названия.
Другие поля информации для этих узлов (текст урока/упражнения и т. Д.) Хранятся в отдельных таблицах для каждого поля. Например, есть таблица drupal_field_data_description
, которая содержит описание для каждого урока и упражнения.
Категории хранятся в таксономии term
Таблица.
Отношения между категориями обрабатываются с помощью таблицы индексов таксономии, которая устанавливает отношения между родителями и родителями (так что вы можете иметь шкалы, шкалы-> основные шкалы и т. Д.). По моему вопросу, я просто рассматриваю одну глубину категории.
Категории уроков и упражнений хранятся в таблице drupal_field_data_field_category
, в которой перечислены уроки и упражнения к той категории, в которой они входят.
Взаимоотношения между родителями и родителями содержатся в таблице drupal_field_data_field_lesson
, которая отображает упражнения на уроки.
Вот пример данных:
категорий (drupal_taxonomy_term_data):
tid vid name
1 2 Scales
2 2 Arpeggios
уроки и упражнения (drupal_node):
nid type title
1 lesson Lesson1
2 lesson Lesson2
3 exercise Ex1_1
4 exercise Ex1_2
5 exercise Ex2_1
6 exercise Ex2_2
Описание поля для занятий и упражнений (drupal_field_data_field_description):
entity_type bundle entity_id field_description_value
node lesson 1 Lesson1Summary
node lesson 2 Lesson2Summary
node exercise 3 Ex1_1Summary
node exercise 4 Ex1_2Summary
node exercise 5 Ex2_1Summary
node exercise 6 Ex2_2Summary
Отображение уроков и упражнений систематике (drupal_taxonomy_index):
nid tid
1 1
2 1
3 1
4 1
5 1
6 1
Отображение уроков и упражнений к категории (drupal_field_data_field_category) (это один почти кажется ненужным из-за индекса систематики):
entity_type bundle entity_id field_category_tid
node lesson 1 1
node lesson 2 1
node exercise 3 1
node exercise 4 1
node lesson 5 1
node lesson 6 1
отображение упражнений для уроков (drupal_field_data_field_lesson):
entity_type bundle entity_id field_lesson_target_id
node exercise 3 1
node exercise 4 1
node exercise 5 2
node exercise 6 2
Итак ... с этой структурой, я не могу понять, как построить запрос, который возвращает результат в виде
Lesson1 Lesson1Summary
Ex1_1 Ex1_1Summary
Ex1_2 Ex1_2Summary
Lesson2 Lesson2Summary
Ex2_1 Ex2_1Summary
Ex2_2 Ex2_2Summary
Обратите внимание, что Lesson1 и Lesson2 находятся в одной и той же категории.
Мне нужно вернуть такие данные, потому что для страницы категории (которая не имеет подкатегорий) мне нужно отобразить таблицу для каждого урока, который показывает упражнения на уроке.
Я мог бы сделать все это в нескольких запросах, но я действительно пытаюсь лучше понять SQL-соединения и группировку. Кроме того, я не настроен на набор результатов, как показано выше. Я открыт, чтобы любой набор результатов позволял мне легко отображать данные (которые я буду делать через PHP) в моде, как я описал.
Как бы вы рекомендовать создание такого запроса, чтобы извлечь урок и его упражнения сгруппированы в логическом порядке (например, как я показываю выше)?
Кажется получать уроки и упражнения в этом случае было бы равнозначно автообъединение, с различными внутренних соединений на другие таблицы, но я просто не могу собрать все вместе это ...