2016-07-07 1 views
1

Вот что у меня есть (имя таблицы является pobjects):Как получить идентификатор родительского корня для детей в таблице

+----+------------+---------+-----------+------+---------+-----------+ 
| id | title  | user_id | published | uri | type_id | parent_id | 
+----+------------+---------+-----------+------+---------+-----------+ 
| 1 | file1.bpmn |  1 |   0 | NULL |  1 |  NULL | 
| 2 | file2.bpmn |  1 |   0 | NULL |  1 |  NULL | 
| 3 | file3.bpmn |  1 |   0 | NULL |  1 |  NULL | 
| 4 | file4.bpmn |  2 |   0 | NULL |  1 |  NULL | 
| 5 | root  |  1 |   0 | NULL |  2 |  NULL | 
| 6 | root  |  2 |   0 | NULL |  2 |  NULL | 
| 7 | root  |  3 |   0 | NULL |  2 |  NULL | 
+----+------------+---------+-----------+------+---------+-----------+ 

Эти строки представляют собой файлы и корневые каталоги. Мне нужно обновить каждый файл parent_id в том же корневом каталоге пользователя id. Таким образом, в основном мне нужен этот результат:

+----+------------+---------+-----------+------+---------+-----------+ 
| id | title  | user_id | published | uri | type_id | parent_id | 
+----+------------+---------+-----------+------+---------+-----------+ 
| 1 | file1.bpmn |  1 |   0 | NULL |  1 |   5 | 
| 2 | file2.bpmn |  1 |   0 | NULL |  1 |   5 | 
| 3 | file3.bpmn |  1 |   0 | NULL |  1 |   5 | 
| 4 | file4.bpmn |  2 |   0 | NULL |  1 |   6 | 
| 5 | root  |  1 |   0 | NULL |  2 |  NULL | 
| 6 | root  |  2 |   0 | NULL |  2 |  NULL | 
| 7 | root  |  3 |   0 | NULL |  2 |  NULL | 
+----+------------+---------+-----------+------+---------+-----------+ 

Помощь был бы очень благодарен, как я не SQL гуру, но я устал, не используя возможности SQL.

ответ

4

Вы можете сделать это с UPDATE .. JOIN:

UPDATE YourTable t 
JOIN YourTable s 
ON(t.user_id = s.user_id and t.title <> 'root' and s.title = 'root') 
SET t.parent_id = s.id 
+0

Спасибо, что сделал трюк! Я отвечу на ваш ответ через 10 минут, так как это не позволит мне принять его так скоро. – Salkz

+0

Нет проблем. – sagi