За последние 24 часа нас посетили 34125 программистов и 1314 роботов. Сейчас ищут 946 программистов ...

Как записать массив из id в одно поле базы

Тема в разделе "PHP для новичков", создана пользователем Dilon, 14 мар 2015.

  1. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Ситуация такая.

    есть две простые таблицы klient и product.
    Хочу реализовать хранение массива из id и product в 'одном' поле новой таблицы в МySql.
    A также вывод вот в таком виде.
    [​IMG]

    Возможно ли это? Помогите пожалуйста, голова пухнет :))))
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Есть такое понятие, как "сериализация". Курите. Либо нативную сериализациюю PHP, либо в JSON. И храните все одной строкой. Обратный процесс - десериализация.

    Код (Text):
    1. $string = serialize($array); // превратит массив в строку
    2. $array = unserialize($string); // превратит эту строку обратно в массив
    Добавлено спустя 1 минуту 12 секунд:
    Для json:

    http://php.net/manual/ru/function.json-encode - данные в строку
    http://php.net/manual/ru/function.json-decode - строку в данные

    Что использовать лучше? Попробуйте и то и то, что больше нравится, то и используйте. По скорости они примерно одинаковые, и обе очень быстрые. У JSONа, разве что, есть бонус, если эти данные нужно будет передавать на клиент в JavaScript.
     
  3. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Ага! Спасибо! Вроде начинает доходить. Сейчас что-нибудь попробуем.

    Добавлено спустя 4 минуты 42 секунды:
    A какой тип поля в таблице должен быть для массива? varchar?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    если меньше 256 символов, то varchar, больше text
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Курить надо нормализацию базы данных а не сериализацию.

    Dilon сериализация нафиг здесь не нужна, потом страдать будешь.

    Добавлено спустя 32 секунды:
    Ты бы тоже сериализировал бы?
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Стоп. Вам нужна таблица связей, так? Связать между собой клиентов и купленные ими товары? Тут не надо экономить на полях, т.к. с этим потом будет целый ворох проблем. К примеру, как вы узнаете сколько товаров покупают больше всего? Ведь придется перебирать все эти текстовые поля вручную.

    Делайте связующую таблицу, в ней поля: id, client_id, product_id и храните там свои связи. Так же не мешает ознакомиться с FOREIGN KEY http://www.mysql.ru/docs/man/SEC451.html, с помощью этой штуки можно автоматизировать некоторые вещи, в данном случае удалять связи при удалении клиента / товара из базы.

    Добавлено спустя 2 минуты 14 секунд:
    Я бы добавил, что внимательно и вдумчиво курить, иначе может возникнуть "ой" который будет очень трудно исправить ))
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    smitt смотря какая задача, обычно этого не требуется
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Тут явно же ТС хочет магаз накодить:)
     
  9. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Блин! Не совсем точно выразил задачу наверно. Извинтиляюсь если что.

    Надо потом чтобы поле id_product изменялось. Добавление новых данных из таблицы product, и также удаление. Воот!!!

    Добавлено спустя 40 секунд:
    Не... не магаз
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    romach тебе написал в какую сторону смотреть.

    Не угадал(((
     
  11. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Не угадал((([/quote]

    :))))))

    Шас посмотрим ....
     
  12. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Еще одна задача на сообразительность. Но никак не могу дотумкать.

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

    Мне почему то думается tbl_student('id','student'), tbl_prepod('id','prepod'), univer('student_id','prepod_id')

    Воот! Прощу помощи!
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Dilon, правильно думается. Многие ко многим делается через доп. таблицу
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Блин, тема называется "Как записать массив из id в одно поле базы". Массивы в базу пишут через сериализацию :)
    Не нагоняйте сферических коней, что человек попросил, то и получил.

    Автор, вот, затягивайся: http://habrahabr.ru/post/193380/
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Сурикат, ты как бы не на американских форумах, где отвечают именно на тот вопрос, что спрашивают. У нас обычно каждый отвечающий должен сделать три вещи: обозвать спрашивающего нубом, обозвать нубами всех давших ответы, предложить свою версию костыля ))

    А если серьезно, человек может быть просто не в курсе что задачу обычно реализуют не так как он себе это представляет. Бывает что просто мозги клинануло и ты городишь большой костыль вместо очевидного решения. Короче, сферические кони иногда полезны, имхо ))

    Dilon, все верно. Только я бы название последней таблицы сделал очевиднее, типа student_prepod. Вдруг тебе ещё понадобится таблица с универами, а название уже занято )