Приветствую всех! Столкнулся с пороблемой, над которой бьюсь несколько дней. Есть товары, у товаров есть опции. Опции разбиты на группы (opt_group). Групп пока 7 (не ограничено). Опции бывают зависимые или незавиcимые. Зависимость опций друг от друга показывает поле parent_id Нужно перечислить все варианты опций для данного товара. Т.о. мы должны получить такие строки: 669, 1009, 1122, 1274, 1477 669, 1009, 1202, 1274, 1477 669, 1009, 1022, 1274, 1477 Спойлер: продолжение 669, 1009, 1122, 1274, 1480 669, 1009, 1202, 1274, 1480 669, 1009, 1022, 1274, 1480 669, 1010, 1123, 1274, 1477 669, 1010, 1203, 1274, 1477 669, 1010, 1023, 1274, 1477 669, 1010, 1123, 1274, 1480 669, 1010, 1203, 1274, 1480 669, 1010, 1023, 1274, 1480 669, 1011, 1121, 1274, 1477 669, 1011, 1133, 1274, 1477 669, 1011, 1204, 1274, 1477 669, 1011, 1121, 1274, 1480 669, 1011, 1133, 1274, 1480 669, 1011, 1204, 1274, 1480 669, 1260, 1261, 1274, 1477 669, 1260, 1266, 1274, 1477 669, 1260, 1267, 1274, 1477 669, 1260, 1261, 1274, 1480 669, 1260, 1266, 1274, 1480 669, 1260, 1267, 1274, 1480 670, 1012, 1025, 1274, 1477 670, 1012, 1125, 1274, 1477 670, 1012, 1208, 1274, 1477 670, 1012, 1025, 1274, 1480 670, 1012, 1125, 1274, 1480 670, 1012, 1208, 1274, 1480 670, 1013, 1026, 1274, 1477 670, 1013, 1126, 1274, 1477 670, 1013, 1209, 1274, 1477 670, 1013, 1026, 1274, 1480 670, 1013, 1126, 1274, 1480 670, 1013, 1209, 1274, 1480 670, 1014, 1027, 1274, 1477 670, 1014, 1127, 1274, 1477 670, 1014, 1210, 1274, 1477 670, 1014, 1027, 1274, 1480 670, 1014, 1127, 1274, 1480 670, 1014, 1210, 1274, 1480 670, 1015, 1028, 1274, 1477 670, 1015, 1128, 1274, 1477 670, 1015, 1211, 1274, 1477 670, 1015, 1028, 1274, 1480 670, 1015, 1128, 1274, 1480 670, 1015, 1211, 1274, 1480 Например мы выбираем опцию 669 из 1 группы. Нам доступны следующие (зависимые от 669) опции 1009 и 1010 из 3 группы. Первая из них 1009 - соответственно доступны 1122, 1202 и 1022 из группы 2 и далее две независимые опции 1274 и 1477 Количество опций для каждого товара свое и зависит от количества выбранных групп. Для данного товара их 5. Группы, как видно также могут следовать в произвольном порядке. Короче полное счастье для юзера и полная жопа для моей задачи: перечислить все товары со всеми опциями (для Яндекс YML). Главная проблема заключается как раз в этой зависимости, поэтому простой рекурсией ничего не получается (во всяком случае у меня не получается). К примеру с первой строкой все понятно, а вот следующая ... нужно как-то хранить 5 переменных для каждой строки, "протягивать" для каждой строки повторяющиеся и менять их проверяя зависимость. Короче я потерялся ( Нужна идея как получить этот чертов массив строк. Может не через массивы? Или вообще подключить SQL ... Вот ( сокращенная ) выборка опций из базы (id) для одного товара (product_id = 676): Спойлер: выборка id product_id opt_group parent_id --------------------------------------------- 669 676 1 Null 670 676 1 Null 1022 676 2 1009 1023 676 2 1010 1025 676 2 1012 1026 676 2 1013 1027 676 2 1014 1028 676 2 1015 1260 676 3 669 1009 676 3 669 1010 676 3 669 1011 676 3 669 1012 676 3 670 1013 676 3 670 1014 676 3 670 1015 676 3 670 1122 676 2 1009 1123 676 2 1010 1133 676 2 1011 1121 676 2 1011 1125 676 2 1012 1126 676 2 1013 1127 676 2 1014 1128 676 2 1015 1202 676 2 1009 1203 676 2 1010 1204 676 2 1011 1208 676 2 1012 1209 676 2 1013 1210 676 2 1014 1211 676 2 1015 1261 676 2 1260 1266 676 2 1260 1267 676 2 1260 1274 676 6 Null 1477 676 7 Null 1480 676 7 Null Получаю такой массив: Спойлер: массив array( [1] =>array( [669] => [670] => ) [2] =>array( [1022] =>1009 [1023] =>1010 [1025] =>1012 [1026] =>1013 [1027] =>1014 [1028] =>1015 [1121] =>1011 [1122] =>1009 [1123] =>1010 [1125] =>1012 [1126] =>1013 [1127] =>1014 [1128] =>1015 [1133] =>1011 [1202] =>1009 [1203] =>1010 [1204] =>1011 [1208] =>1012 [1209] =>1013 [1210] =>1014 [1211] =>1015 [1261] =>1260 [1266] =>1260 [1267] =>1260 ) [3] =>array( [1009] =>669 [1010] =>669 [1011] =>669 [1012] =>670 [1013] =>670 [1014] =>670 [1015] =>670 [1260] =>669 ) [6] =>array( [1274] => ) [7] =>array( [1477] => [1480] => ) )
Рекурсия. И постарайтесь выгрузить все данные заранее и обходить их на стороне пышки, а не тыкать в базу мильёнами лишних запросов, хотя для разовой задачки можно и так, но это вредно !