2014-01-21 4 views
2

У меня есть задача, которая обрабатывает сложный JOIN-запрос.сложный mysql-запрос join in в таблицах

Tabel 1: object_category (Дерево, как структура, чтобы иметь родительскую категорию в иерархии категорий ребенка)

 
---------------------- 
category_id parent_id 
---------------------- 
1   null 
2   null 
3   1 
4   1 
5   2 
6   2 
---------------------- 

Примечание категории 3 ребенок 1, 5 является ребенок 2, и т.д ....

Таблица 2: object_category_map (таблица для отображения object_id с category_id из таблицы object_category)

 
---------------------- 
object_id category_id 
---------------------- 
23   1 
23   4 
23   6 
24   2 
24   5 
---------------------- 

Задача состоит в том, чтобы найти объект_ид, который не имеет parent_id для map_id.

Пример1: object_id: 24, category_id: 2, 5 в таблице 2, object_id 24 имеет category_id 5 связаны, а также parent_id 5 это 2,

Пример 2: object_id: 23 , category_id: 1, 4, 6 object_id 23 промах parent_id (2) для category_id 6.

Задача состоит в нахождении 23, что является список object_id (ы) образуют table2, которые являются ситуация, как 23.

любезно поможет в решении этого вопроса. Благодарю.

+0

Во-первых, то, что вы пытаетесь достичь, это понятие иерархии узел, здесь вы можете использовать JOIN и на фиксированном уровне, скажем, уровень материнской компании до 2, так что вы можете сделать до 3 присоединяется, но что, если иерархия родительского возраста продолжает расти? Поэтому для этого вам придется пройти иерархию узлов до тех пор, пока вы не получите parent_id как NULL. Для этого вам требуются усилия по программированию + попытки SQL-запросов и использование рекурсивной функции, пока вы не получите parent_id как NULL. Какой язык вы используете, поэтому я могу указать правильный пример – rsakhale

+0

Я использую PHP с Mysql –

ответ

1

Не могли бы вы попробовать что-то вроде этого.

select object_parent_needed.object_id 
from (
    select object_id,object_category_map.category_id,parent_id 
    from object_category_map 
    join object_category on object_category_map.categor_id = object_category.category_id 
    where parent_id is not null 
) object_parent_needed 
left outer join object_category_map on object_category_map.object_id = object_parent_needed.object_id 
            and object_category_map.category_id = object_parent_needed.parent_id 
where object_category_map.category_id is null 
+0

см. Скрипку здесь: http://sqlfiddle.com/#!2/b4cdbf/3/0 – dagfr