[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранение в БД данных со множеством значений.
Forever
Необходимо хранить БД информацию об отношении пользователя к алкоголю (например). Для Этого я создал в таблице пользователей столбец "alcohol", и для пользователя там может быть только одно значение - либо редко, либо часто, либо нет. С этим все ясно.

А как быть, допустим, с языками? Человек может знать более одного языка. Как хранить такие данные? Не создавать же для каждого языка отдельный столбец.
Arh
Можно создать отдельную таблицу где будет два поля (id пользователя и язык)
id | lang
1 ru
1 en
2 ru
3 en


Потом можно запросом получить массив языков, которые знает пользователь с id 1 например.

Либо можете хранить все языки через запятую, а потом разбирать на массив.
$row['lang'] = 'ru,en,ua';
$array = explode(',',$row['lang']);
print_r($array);


Но в таком случае поиск пользователя, знающего русский язык будет более сложный через REGEXP


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
sergeiss
Цитата (Forever @ 30.07.2014 - 14:03)
А как быть, допустим, с языками? Человек может знать более одного языка. Как хранить такие данные? Не создавать же для каждого языка отдельный столбец.

1. Если список языков заведомо известен, то можно и отдельный столбец для каждого языка smile.gif Да, не рационально и неудобно работать с такими данными, но в целом вариант рабочий.
2-3 написано в предыдущем ответе (отдельная таблица для языков либо список через запятую)
4. Использовать другой тип БД, где можно работать с данными, записанными в формате JSON либо "массив". Например, PostgreSQL поддерживает и то, и другое.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
Либо можете хранить все языки через запятую, а потом разбирать на массив

ужасный совет

_____________
Стимулятор ~yoomoney - 41001303250491
Arh
Цитата (Valick @ 30.07.2014 - 14:46)
Цитата
Либо можете хранить все языки через запятую, а потом разбирать на массив

ужасный совет

Смотря что нужно =)
Если нужно просто вывести список языков которые знает пользователь, без всяких сортировок, зачем городить лишние таблицы и делать лишние запросы?
Может автору даже explode не пригодиться, может языки так и будут выводиться через запятую.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Valick
Цитата
Если нужно просто вывести список языков которые знает пользователь

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



_____________
Стимулятор ~yoomoney - 41001303250491
Arh
Цитата (Valick @ 30.07.2014 - 15:08)
Цитата
Если нужно просто вывести список языков которые знает пользователь

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

Я упомянул про сложность выборки. Это не совет, это вариант реализации, а ужасный он или нет зависит от обстоятельств.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.