Десерелизация

fisel

Новичок
Здравствуйте, есть таблица order в бд, в ней в серелизованом виде хранится заказ, а именно продукты и их колличество. Как подсчитать колличество заказанных продуктов каждого вида по всем заказам?
Есть проблема, что один продукт может повторяться в одном заказе, напимер картошка - 1шт, картошка - 5 штук

Подскажите пожалуйста оптимальный алгоритм.

Рассерилизовать в массив, и проводить математеку функциями php и в каком виде лучше представить массив или как то можно математику через sql?

Array_count_values возможно?

Посоветуйте как быть?
 

ksnk

прохожий
@fisel, пара вопросов
- откуда взялась база?
- Можешь ли ты ее вот так вот взять и поменять, как советует флоппик?
Если база не твоя и на ней уже есть готовый магазин с товарами, то хозяин может быть против внезапных изменений

- что такое сериализация - json поля в базе или строка, сделанная функцией php serialize.
Если json - потенциально можно вывести всю купленную картошку, а в случае serialize- нет, нужно считать на php
 

fisel

Новичок
Не ну это не принципиально, пусть у вас таблица order, в ней id_product внешний ключ продукта и колличество. тем не менее набор продуктов , т.е заказ- засерелиазован. Итого нужно получить сколько продуктов из всей таблицы куплено Как???
 

fisel

Новичок
Еслиб были строки, то без проблем select sum(quantity и все, НО ЗДЕСЬ ОДНА СТРОКА, как провести операции на php
 

ksnk

прохожий
Итого нужно получить сколько продуктов из всей таблицы куплено Как???
Если ты не можешь/ не хочешь менять структуру базы и приводить ее к нормальным формам, если у тебя поле , в котором находится заказ, засериализовано в массив PHP, то остается единственное решение - в цикле открываешь все записи по одной, и суммируешь интересную тебе информацию интересным тебе образом. Иначе нельзя, никто это за тебя не сделает.
Если ты можешь преобразовать базу - суммировать за тебя может sql сервер. Если ты сериализовал заказ в массив json и у тебя достаточно умный sql сервер - то ты тоже можешь попросить sql-сервер тебе все посчитать.
 

fisel

Новичок
@ksnk, отлично, а какой функцией выбрать из расериализованой строки, инициализировать элементы массива?

Вот типа той функции array count values
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Так у тебя после unserialize уже массив, дальше работаешь с ним как хочешь.
 

fisel

Новичок
Ну как как хочу, как мне перебирать элементы и как находить одинаковые, как это условие написать - одинаковые id_product?как примерно подскажите
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@fisel, программирование - суть работа долгая и сложная. Надо учиться самому делать то, что хочешь. Если конкретно не понятно что-то - форум поможет, но никто не знает структуры данных, которые у тебя там есть и какой group by ты хочешь заменить.
 

fisel

Новичок
Вы предложили перебирать рассерелизованую инфу, т.е массив, перебираем и как задать условие, как согнать каждый элемент массива к своему, чем определяется схожесть элементов массива?
 

Andkorol

Новичок
Вы предложили перебирать рассерелизованую инфу, т.е массив, перебираем и как задать условие, как согнать каждый элемент массива к своему, чем определяется схожесть элементов массива?
На пальцах – никак.
Покажи уже свои данные.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@fisel, выведите массив на экран, подумайте, по каким критериям у вас можно считать некоторые из ключей массива схожими?
 
Сверху