Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Не тривиальный sql запрос

Страниц (1): [1]
 

1. rasy.js - 06 Марта, 2017 - 19:37:40 - перейти к сообщению
Здравствуйте! Улыбка

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. id | parent_id | closest_id
  3. 1  | 3            | 0
  4. 2  | 4            | 0
  5. 3  | 0            | 0
  6. 4  | 3            | 0
  7. 5  | 4            | 0
  8.  


Опытные бэкендеры. Помогите, пожалуйста, составить правильный запрос.
Итерируя по каждому полю нужно получить значение из ячейки parent_id. Обратиться по значению к полю, получить значение из его parent_id и записать значение в ячейку closest_id первого поля.

Такой итог:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. id | parent_id | closest_id
  3. 1  | 3            | 6
  4. 2  | 4            | 3
  5. 3  | 6            | 0
  6. 4  | 3            | 6
  7. 5  | 4            | 3
  8. 6  | 0            | 0
  9.  
2. T1grOK - 06 Марта, 2017 - 20:04:17 - перейти к сообщению
Элементарный запрос с одним JOIN-ом.
3. rasy.js - 06 Марта, 2017 - 20:44:33 - перейти к сообщению
T1grOK, Благодарю за указатель
4. rasy.js - 11 Марта, 2017 - 01:23:53 - перейти к сообщению
Сделал на пыхе через рекурсию, т.к на языке запросов еще рука не набита. Есть замечания? $list_categories массив объектов всех категорий.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function getParentId($id)
  4. {
  5.   $db = JFactory::getDbo();
  6.   $query = $db->getQuery(true);
  7.   $query->select('parent_id');
  8.   $query->from($db->quoteName('#__categories'));
  9.   $query->where($db->quoteName('id') . ' = ' . $id);
  10.   $db->setQuery($query);
  11.   $result = $db->loadResult();
  12.  
  13.   if (!(int)$result) {
  14.     $query->clear();
  15.     return $id;
  16.   }
  17.  
  18.   return getParentId($result);
  19. }
  20.  
  21. foreach ($list_categories as $key => $value) {
  22.   if ((int)$value->parent_id) {
  23.     $par_id = getParentId($value->id);
  24.     $query = $db->getQuery(true);
  25.     $query->update($db->quoteName('#__categories'))
  26.           ->set($db->quoteName('closest_id') . ' = ' . $par_id)
  27.           ->where($db->quoteName('id') . ' = ' . $value->id);
  28.     $db->setQuery($query);
  29.     $db->query();
  30.     $query->clear();
  31.   }
  32. }
  33. unset($value);
  34.  
  35.  

 

Powered by ExBB FM 1.0 RC1