Группировка данных. Логика реализации.

Dzen

Новичок
Добрый день,
Подскажите пожалуйста, каким образом лучше сгруппировать данные по айди?

Есть таблица в базе, например:

Айди_района| айди магазина| название магазина|название отдела| и т.д.

Хотелось бы сгруппировать данные по айди_района, внести изменения например в название некоторых отделов и пакетом/массивом (каждым районом) отправить данные в другую базу. Другая база так устроена, что можно передать пакет/массив по району, как раз чтобы не делать сотни запросов к базе, т.е. в этом проблемы нет.

Суть в том, как лучше реализовать группировку? Получить из таблицы список айди_районов по GROUP BY, а далее вторым запросом выдёргивать данные из базы по этому списку районов - WHERE район=полученый район по GROUP BY, делать изменения, создавать массив и далее отправлять весь пакет (район).
Или сделать ORDER BY и далее уже в скрипте как-то обрабатывать?
 

Фанат

oncle terrible
Команда форума
На мой взгляд - пофигу.
Но первый вариант сложнее в реализации.
Но вообще - пофигу, делай, как тебе проще.
 

Dzen

Новичок
странно, у меня первый вариант в голове сразу нарисовался, просто цикл в цикле и всё - Получили всех и далее идем по всем по очереди. Может конечно есть подводные камни.
А второй, надо делать ловушку чтобы понять когда пошел уже другой айди_района. Или как-то иначе раскидать каждые айди_района по отдельным массивам. Ну как-то не "пришло" про это пока )
 

Фанат

oncle terrible
Команда форума
одна переменная и один иф. кода меньше, чем в строчке
надо делать ловушку
но если двумя запросами в цикле проще - ради бога, это не принципиально
 

Dzen

Новичок
PHP:
  while ($proc = mysql_fetch_.... 
              {
...

if (($id_check == $id_raiona) and ($id_check)) 
{
echo " все принадлежит этому району"; 
..нужные операции
}
else
{
echo " пошел новый район";
..инициализация функций для каждого нового района
}

$id_check == $id_raiona;

}
так? или поменьше строк можно?)
 

Фанат

oncle terrible
Команда форума
PHP:
$id_check = 0;
while ($proc = mysql_fetch_.... 
{
    if (($id_check != $id_raiona)) 
    {
        echo " пошел новый район";
        ..инициализация функций для каждого нового района
    }
    ..нужные операции
    $id_check == $id_raiona;
}
 
  • Like
Реакции: Dzen

Dzen

Новичок
ну да, только в Ваш пример надо else добавить, после ифа, чтобы выводились все строки таблицы которые относятся к району.
Работают оба варианта, но Ваш симпатичнее). Спасибо!
 

Фанат

oncle terrible
Команда форума
else как раз не нужно.
если будет else, то будет пропускаться первая строка каждого района
 

Dzen

Новичок
там просто для (...инициализация функций для каждого нового района), берётся его айди, один раз, и передается в функцию, именно один раз это надо сделать, чтобы его идентифицировать в функции.
То есть:
пошла строка с новым районом
взяли из неё айди района, запустили функцию с его айди для сбора данных, сформировали массив где будет сборка для всех его магазинов, передали в массив информацию по первому магазину (т.к. он записан тоже в строке), всё это до else. вот тут:

PHP:
if (($id_check != $id_raiona)) 
    {
        echo " пошел новый район";
        ..инициализация функций для каждого нового района
    }
т.к. структура таблицы:
Айди_района| айди магазина| название магазина|название отдела|

т.е. обработали первую строку.

а далее else и операции по магазинам для этого района со следующими строками по таблицы, которые собираются в массив который инициализировали до else.

Ваш пример, но с else, мне кажется верно устроен исходя из логики выше.
 

Фанат

oncle terrible
Команда форума
повторяющийся два раза один и тот же код в принципе не может быть верным.
инициализацию массива ради бога оставляй внутри ифа.
но обработка первой строки должна вестись там же, где и остальных.
 
Сверху