У меня есть таблица пунктов назначения (состояний), которые содержат категории и подкатегории первичного уровня для действий. Моя конечная цель - выводить навигационные ссылки в формате XML, чтобы я мог ссылаться на:
Ниже приведено то, что Я сгенерирую запрос sql, если он не имеет отношения к запросу, но мне не нужна xml-помощь по этому вопросу :
<item href="/destinations/alabama/">
<list>
<item href="/destinations/alabama/category/">
<list>
<item href="/destinations/alabama/category/sub-category/"></item>
</list>
</item>
</list>
</item>
<item href="/destinations/maryland/">
<list>
<item href="/destinations/maryland/category/">
<list>
<item href="/destinations/maryland/category/sub-category/"></item>
</list>
</item>
</list>
</item>
В настоящее время у меня есть запрос, который захватывает подкатегории, но он не учитывает активные направления.
SELECT
subcategories.name AS subcategory_name,
subcategories.slug AS subcategory_slug,
categories.name AS category_name,
categories.slug AS category_slug
FROM
subcategories
LEFT JOIN destinations_subcategories ON
destinations_subcategories.subcategory_id = subcategories.id
LEFT JOIN categories ON
destinations_subcategories.category_id = categories.id
WHERE
1=1 AND
subcategories.is_active = 1 AND
categories.is_active = 1
Что возвращает:
subcategory_name subcategory_slug category_name category_slug
Fly Fishing fly-fishing Fishing fishing
Но этот запрос не учитывает активные назначения, так как можно сопоставить отношения между неактивными назначениями и активными категориями. Я' я думаю, что мне нужно иметь подзапрос, захватывающий все активные пункты назначения, а затем присоединиться?
СХЕМА / выборки строк:
id name slug active
7 Maryland maryland 1
Моя таблица категорий, строка выборки:
id name slug active
1 Fishing fishing 1
Пример строки таблицы подкатегорий:
id name slug active
3 Fly-Fishing fly-fishing 1
И 2 таблицы для хранения отношений, первая отображает подкатегории в категории:
id category_id subcategory_id
5 1 3
Вторая, Destination_subcategories
отображает назначения в подкатегории:
id destination_id category_id subcategory_id
5 7 1 3
а как насчет этого
SELECT
subcategories.name AS subcategory_name,
subcategories.slug AS subcategory_slug,
categories.name AS category_name,
categories.slug AS category_slug
FROM
destination
INNER JOIN destinations_subcategories on destination.id = destinations_subcategories.destination_id and destination.active = 1
LEFT JOIN subcategories ON destinations_subcategories.subcategory_id = subcategories.id
LEFT JOIN categories ON destinations_subcategories.category_id = categories.id
WHERE 1=1
AND subcategories.is_active = 1
AND categories.is_active = 1
Это обеспечит отображение только активных пунктов назначения
SELECT destination.name , categories.name, sub-category.name
FROM
destination_subcategories as ds, destinations, categories, subcategories
WHERE
ds.destination_id = destination.id and ds.catrgoy_id = category.id and ds.sub_category_id = sub_category.id and destination.is_active = 1 and categories.is_active = 1 and subcategory.is_active = 1;
Похоже, это должно работать, если только я неправильно понял схему.