Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 07:54:01

Страниц: [1] 2
Печать
Автор Тема: Хранение массивов в БД  (Прочитано 802 раз)
0 Пользователей и 1 Гость смотрят эту тему.
smv    ↓ 
22 Апрель, 2011, 02:43:36
НЕ ХУЕТА! ХУЕТА!

Карма: -2
Сообщений: 234
Сила слова: -0.85

Добрый день. Где-то видел подобную тему, но сейчас не нашел. Задача такая. Надо в MySQL  хранить заказы покупателей в интернет-магазине. Рассматриваю два варианта. Записывать в БД каждую позицию купленного товара (естественно с отметкой принадлежности к какому либо заказу.) Или для каждого заказа вставлять одну запись где и будет храниться массив со всеми купленными товарами. Хранить массив мне показалось лучше. В связи с этим нашел статейку как это сделать - http://ruseller.com/lessons.php?rub=37&id=699
 
Вопрос 1 как лучше хранить?
Вопрос 2 верить ли указанной статье?
Записан
Troy    ↓ 
22 Апрель, 2011, 03:46:35 , спустя 1 час 2 минуты 59 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 45
Сообщений: 2393
Сила слова: 1.88

серилизовать и хранить
Спустя 24 секунды добавил
Еще в json можно
Записан

master    ↓ 
22 Апрель, 2011, 03:46:47 , спустя 12 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

как хранить зависит от того что ты собираешься потом с этими данными делать, какие нужны выборки
Записан

Givi    ↓ 
22 Апрель, 2011, 03:52:44 , спустя 5 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 42
Сообщений: 2305
Сила слова: 1.82

smv, это не лучший вариант. Причины:
1. Если тебе понадобится некая статистика аль ещё чего-нить подобное, то ты хрен её получишь нормальными методами.
2. Если удаляешь из базы некий товар, то в твоем случае в старом заказе будет "дырка". А в случае первого твоего варианта ты можешь при удалении товара из базы просто сделать некую отметку или прочее со всеми заказами, которые были на этот товар.
Нужно это для случая, если, к примеру, один товар просто удален из базы, так как ты передумал им торговать, другой удален так как больше не выпускается. А третий товар удален, так как менеджер дятел.
В общем, в любом случае если будет стоять некая отметка о причине удаления товара, то вполне возможно в заказе это отметить, или же даже банально сохранить только наименование удаленного товара в заказах.
 
Хотя, если магазин мелкий, то делай как тебе удобней. А хранить массив в БД удобно в помощью функции serialized().
Записан

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
smv    ↓ 
22 Апрель, 2011, 03:57:08 , спустя 4 минуты 24 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: -2
Сообщений: 234
Сила слова: -0.85

серилизовать и хранить
Спасибо
как хранить зависит от того что ты собираешься потом с этими данными делать, какие нужны выборки
По каждому заказу выбираю массив с id товаров. Выбираю товары в соответствии с id  их цену и отправляю по почте.
Спустя 1 минуту 56 секунд добавил

smv, это не лучший вариант. Причины:
1. Если тебе понадобится некая статистика аль ещё чего-нить подобное, то ты хрен её получишь нормальными методами.
2. Если удаляешь из базы некий товар, то в твоем случае в старом заказе будет "дырка". А в случае первого твоего варианта ты можешь при удалении товара из базы просто сделать некую отметку или прочее со всеми заказами, которые были на этот товар.
Нужно это для случая, если, к примеру, один товар просто удален из базы, так как ты передумал им торговать, другой удален так как больше не выпускается. А третий товар удален, так как менеджер дятел.
В общем, в любом случае если будет стоять некая отметка о причине удаления товара, то вполне возможно в заказе это отметить, или же даже банально сохранить только наименование удаленного товара в заказах.
 
Хотя, если магазин мелкий, то делай как тебе удобней. А хранить массив в БД удобно в помощью функции serialized().

О спасибо... будет над чем подумать.
Записан
Абырвалг    ↓ 
22 Апрель, 2011, 04:20:05 , спустя 22 минуты 57 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

В связи с этим нашел статейку как это сделать - http://ruseller.com/lessons.php?rub=37&id=699
Частная коллекция качественных материалов для тех, кто делает сайты
ложь, пиздешь и провокация
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
Scratch    ↓ 
24 Май, 2011, 02:35:21 , спустя 31 день 10 часов 15 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 5
Сила слова: 0

Классический вариант в виде таблицы id заказа - id товара лучше. Подумайте, например, над простой задачей - "вывести все заказы, где присутствует товар X". Например, если поставки товара X прекратились и надо уведомить заказчиков об этом. В случае хранения сериализованных данных вас ждут пляски с бубном... В первом варианте - простейший SELECT.
Записан
phpdude    ↓ 
24 Май, 2011, 02:48:41 , спустя 13 минут 20 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

Например, если поставки товара X прекратились и надо уведомить заказчиков об этом. В случае хранения сериализованных данных вас ждут пляски с бубном... В первом варианте - простейший SELECT.
например глупая менеджер вместо кнопки "отклчить товар" нажала кнопку "удалить товар" и во всех заказах при join'e пошли позиции пиздой где присутствовал этот товар.
 
еще доводы?
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
master    ↓ 
24 Май, 2011, 07:55:48 , спустя 5 часов 7 минут 7 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

например глупая менеджер вместо кнопки "отклчить товар" нажала кнопку "удалить товар" и во всех заказах при join'e пошли позиции пиздой где присутствовал этот товар.
это решается внешним ключом с ограничением
Записан

Scratch    ↓ 
24 Май, 2011, 11:38:42 , спустя 15 часов 42 минуты 54 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 5
Сила слова: 0


Например, если поставки товара X прекратились и надо уведомить заказчиков об этом. В случае хранения сериализованных данных вас ждут пляски с бубном... В первом варианте - простейший SELECT.
например глупая менеджер вместо кнопки "отклчить товар" нажала кнопку "удалить товар" и во всех заказах при join'e пошли позиции пиздой где присутствовал этот товар.

Ваш пример говорит о глупом программисте, а не о глупом менеджере. Проверку целостности данных для исключения появления товаров-"орфанов" в заказах никто не отменял, и, кстати, такая проверка опять-таки гораздо проще выполняется при хранении данных в несериализованном виде - простейший SELECT для проверки существование товара в заказах перед удалением и сообщение для глупого менеджера от умного программиста.
 
Сериализацию вполне уместно применять для полей, являющихся "описательными" - полей хранения каких-либо вспомогательных данных, извлекаемых для одной записи. Но хранить в сериализованном виде индексные поля выйдет себе дороже.
 
Могу кстати привести и пример реальных PHP приложений, где применяются 2 вышеуказанных подхода. CMS Joomla и популярные CCK K2 и ZOO. В первом элементы для создания приложений хранятся в классическом "реляционном" виде, во втором приложении - в виде сериализованных данных в XML. Сравнивались данные по производительности и, несмотря на бОльшее количество запросов к MySQL для получения нужной схемы данных, первый компонент работает быстрее, чем тот, в котором производится десериализация на лету. И по удобству схемы построения данных для дальнейшей разработки первый компонент явно лидирует: количество сторонних дополнений для классической схемы на порядки больше.
Записан
phpdude    ↓ 
24 Май, 2011, 11:54:01 , спустя 15 минут 19 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

Сравнивались данные по производительности и, несмотря на бОльшее количество запросов к MySQL для получения нужной схемы данных, первый компонент работает быстрее, чем тот, в котором производится десериализация на лету.
Ваш пример говорит о глупом программисте
дае долбоебу очевидно что сериализация работает в сотни раз быстрее запросов в базу. ну хотя учитывая долбоебность программистов жумлы - не удивлюсь что даже сериализацию они испоганили настолько насколько смогли.
 
оффтоп: я просто хотел скзаать что оба метода если влоб имеют недостатки, вот и все, ничего личного. маста хорошо подметил что можно одним внешним ключем решить эту проблему.
Спустя 23 секунды добавил
master, маста, ты получил от меня имайл?
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
md5    ↓ 
25 Май, 2011, 12:00:16 , спустя 6 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10495
Сила слова: 1.19

phpdude, даже я получил от тебя имайл))
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
phpdude    ↓ 
25 Май, 2011, 12:03:16 , спустя 3 минуты
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

md5, да ты ваще сучка, постоянно их получаешь )) надо бы починить это блеядьство xD
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
md5    ↓ 
25 Май, 2011, 12:23:46 , спустя 20 минут 30 секунд
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10495
Сила слова: 1.19

phpdude, лучше новый пыха.ру
с блекджеками и шлюхами
 
скоро новый логотип нам сделают, кстати, хороший :)
мы пока думаем
склоняемся к стилю стимпанка и машинариума
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
Scratch    ↓ 
25 Май, 2011, 12:32:28 , спустя 8 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 5
Сила слова: 0


дае долбоебу очевидно что сериализация работает в сотни раз быстрее запросов в базу. ну хотя учитывая долбоебность программистов жумлы - не удивлюсь что даже сериализацию они испоганили настолько насколько смогли.
Сериализация будет работать быстрее для извлечения данных для одной единственной записи или до определенного порога, после которого JOIN будет быстрее. Программисты, которые писали оба приложения - не самые худшие. Второе приложение проигрывает в производительности именно в случае выборки больших объемов данных, то есть при достижении определенного числа записей, как и было сказано ранее.
 
оффтоп: я просто хотел скзаать что оба метода если влоб имеют недостатки, вот и все, ничего личного. маста хорошо подметил что можно одним внешним ключем решить эту проблему.
И я говорю то же самое :) Можно и ключем, просто выводить осмысленное информационное сообщение вместо сообщения о нарушении целостности (или не выводить никакого) удобнее, если делать запрос.
Записан
Страниц: [1] 2
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, Sinkler