Size: a a a

2021 October 02

Ю

Юрий in MySQL
Т.е. в данном случае должно получиться:

$groupList = [
   [
       'id' => 1,
       'parent_id' => null,
       'category' => null,
       'children_list' => [
           [
               'id' => 4,
               'parent_id' => 1,
               'category' => 'Category number 20',
               'children_list' => [
                   [
                       'id' => 8,
                       'parent_id' => 4,
                       'category' => 'Category number 30',
                   ],
               ],
           ],
       ],
   ],
];
источник

Ю

Юрий in MySQL
Или это можно решить на уровне запроса к БД?
Таблицы
---
groups
groups.id
groups.parent_id
---
categories
categories.id
---
attributes
attributes.category_id
attributes.group_id
источник

DE

Denis Efremov in MySQL
Не очень наглядно это всё. А группы и категории чего?
источник

R

R898 in MySQL
в mysql нельзя сделать рекурсивный запрос, поэтому только средствами php сделать рекурсивную функцию
источник

DE

Denis Efremov in MySQL
В восьмерке можно вроде бы
источник

DE

Denis Efremov in MySQL
Другое дело что структура странная по мне
источник

R

R898 in MySQL
да вроде обычное дерево..
источник

R

R898 in MySQL
$filter = array_map(function ($n){return f($n);}, $groupList[0]);
function f(&$a){
   foreach($a as $k=>&$r){
       if(!$r['category']) unset($a[$k]);
       if($r['children_list']) $r['children_list']=f($r['children_list']);
   }
   return $a;
}
источник

IZ

Ilia Zviagin in MySQL
В mySQL 8 можно
источник

Ю

Юрий in MySQL
> $filter = array_map(function ($n){return f($n);}, $groupList[0]);
Могу ошибаться, но в моём случае нужно что-то вроде обратного обхода дерева - от младшего элемента к старшему. И ещё перебирать нужно всю структуру, у Вас в фильтре только первый элемент
источник

Ю

Юрий in MySQL
У меня в примере, на выходе, первый старший элемент получается по условию
источник

R

R898 in MySQL
1. у вас первый старший элемент это сам массив, поэтому там 0, чтобы взять первый элемент в вашем массиве
2. по условию он у вас удаляется, так как у него category null, поэтому и array_map вместо прямого вывода.
источник

Ю

Юрий in MySQL
Я возможно плохо сформулировал (если так, то извиняюсь)
У меня в первом посте дана общая структура
А во втором,  та структура, что должна быть после обработки условий
Т.е. если в цепочке есть старшие элементы с category = null, то они остаются в структуре, до младшего элемента, у которого categoкy !== null
источник

R

R898 in MySQL
ну такой результат и получается
источник

Ю

Юрий in MySQL
https://3v4l.org/T2Rba
Да, кстати, правильно, но только всё-таки фильтр на первый элемент
Но я попробую доработать
Спасибо большое!
источник

V

Vitaly in MySQL
всем привет, как учесть в условии время оплаты? http://sqlfiddle.com/#!9/5cebf8/1/1
источник

IZ

Ilia Zviagin in MySQL
where ... and payment_time = :pt
источник

IZ

Ilia Zviagin in MySQL
Где там время оплаты , и что значит "учесть" ?
источник

V

Vitaly in MySQL
дословно звучит так
 вывести средний чек каждого клиента, при условии, что клиент совершил  не менее двух заказов на сумму более 1000 рублей каждый
я предположил, что это связано с полями create_at, update_at таблицы order
источник

IZ

Ilia Zviagin in MySQL
И как же это связано?
источник