2015-03-06 8 views
2

Я работаю над тем, что требует от меня хранения массива идентификаторов, соответствующих каждому пользователю.Как хранить массив в базе данных (PHP/MySQL)?

Каждый пользователь должен выбрать номер элементов (мин. 1), каждый из которых имеет уникальный идентификатор. У меня есть массив этих идентификаторов, но я не уверен, как их хранить в db.

Прямо сейчас, я использую php serialize() для хранения массива, но я считаю, что это неэффективно, поскольку я должен запрашивать данные с помощью php вместо sql.

Я ищу лучший способ сделать это - спасибо!

+0

Best сериализуется –

+1

читает несколько руководств по нормализации базы данных – Joshua

+1

Ответ Квентина правильный; стандартный и наиболее приемлемый способ сделать это - вторая таблица с одной строкой на выбор и потенциально много строк на человека. Это позволяет вам делать такие вещи, как «найти всех, кто выбрал вариант 2, с или без других параметров», который будет медленным и громоздким, если вы сохраните сериализованные массивы. Использование JSON - это только хороший вариант, если вы уверены, что вы абсолютно никогда не захотите получить какую-либо информацию, отличную от полного списка выбранных участников. – octern

ответ

2

Не используйте формат сериализации (например, serialize или JSON) - он дает вам данные, которые невозможно запросить на уровне SQL.

Это отношение many-to-many. Обычно это обрабатывается с использованием junction table.

Создать новый стол. Он должен иметь две колонки, такие как user_choosing и user_chosen. Вы можете использовать как комбинированный ключ или иметь отдельный столбец для хранения первичного идентификатора.

Оба столбца должны быть внешними ключами в таблице ваших пользователей.

Затем, когда вы получаете массив пользователей, переверните его и вставьте новую строку для каждого из них (столбец user_choosing является пользователем, который отправил данные).

Затем вы можете использовать JOINS для возврата данных из базы данных с неприкосновенными ассоциациями.

+2

Кто это отрицает? это самый чистый из всех. – Joshua

+1

Я верю, потому что он не отвечает на вопрос «Как хранить массив в базе данных (PHP/MySQL)?», И нет, это не мой голос. –

+0

@RobertPounder - Err. Он отвечает на этот вопрос. – Quentin

1

Существует множество проблем с использованием сериализации, и это не удивило бы меня, если бы оно было устаревшим в ближайшем будущем, вам лучше всего использовать json_encode/json_decode.

http://php.net/manual/en/function.json-encode.php

http://php.net/manual/en/function.json-decode.php

не только json_encode безопаснее при использовании типов, таких как поплавки, его также быстрее и чище.

UPDATE

Цитата со страницы json_encode:

При декодировании строки из базы данных, убедитесь, что вход был закодирован с правильной кодировкой, когда он был вход в базу данных.

Смежные вопросы