Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Несколько значений в одно поле


Автор: elCreator 3.7.2008, 04:27
Как реализуется хранение однотипной информации, соответствующей одному и тому же полю? 
Например, в таблице user храним информацию о пользователях. 
У каждого может быть несколько телефонов - например, максимум 4. В этом случае еще можно создать поля tel1,tel2,tel3,tel4 и соответственно, заполнять их. 
А если хранить нужно, например, не телефоны, а id друзей пользователя на сайте, которых может быть сотня? Не создавать же сто полей вышеописанным методом.

Автор: bars80080 3.7.2008, 08:58
наиболее оптимальная система в этом случае - введение дополнительной таблицы (с точки зрения выборки по этим данным и с точки зрения организации)
то есть делаем таблицу telefons: (id, id_user, number)
и сколько их бы там ни было заполняем. тоже самое с друзьями: (id, id_user, id_frend)

Автор: Feldmarschall 3.7.2008, 09:01
совершенно верно, не создавать сто полей.
а создавать таблицу, с двумя полями.
Возможно, ты слышал, что используемая тобой база данных называется "реляционной".
так вот реляционная - это оно и есть. когда хранить можно не в одной таблице, а в нескольких, устанавливая между ними связи, relations

Добавлено через 2 минуты и 27 секунд
elCreator, а вот пытаться зарабатывать на людях, у которых ты просишь помощи - нехорошо...
убрал бы ты подпись

Автор: Akina 3.7.2008, 09:19
Цитата(elCreator @  3.7.2008,  05:27 Найти цитируемый пост)
Как реализуется хранение однотипной информации, соответствующей одному и тому же полю? 

Курим маны по реализации связи типа "многие-ко-многим" в реляционных БД.

Автор: elCreator 4.7.2008, 05:44
Всем спасибо за ответы. Т.е., таблица будет иметь вид

1|Vasya|333222
2|Vasya|234243
3|Vasya|653545
4|Petya|253434
5|Petya|452435

и дальше SELECT * FROM `users` WHERE nick=`Vasya`; будет выдавать нам все телефоны пользователя Vasya. 

Автор: bars80080 4.7.2008, 09:03
да, но простая рекомендация - лучше, чтобы ещё имелась таблица пользователей, где в каждой строчке будут указаны все данные на пользователя (id, name, surname, height, foto ... и т.п.), а в таблице телефонов не имя пользователя, а id из таблицы пользователей.
выгода очевидна, на тот случай если ты ошибся в имени или вдруг оно поменялось или если есть полный однофамилец, то поменять достаточно будет в одном месте. (особенно это важно становится когда возникают проблемы с кодировками)

Автор: Feldmarschall 4.7.2008, 11:50
id, кстати, в таких таблицах обычно не нужен.

Автор: elCreator 5.7.2008, 21:30
А ID первого зарегистрировавшегося точно будет 1?
Просто помню как в поле id, которое стояло как AUTO_INCREMENT, первая запись почему-то оказалось под номером 40.

Автор: Feldmarschall 5.7.2008, 21:56
а какая разница, какое там число? хоть 4000.
это никак не должно тебя волновать

Автор: elCreator 6.7.2008, 21:00
Просто теперь все уже знают о "контакте", и id=1 у большинства пользователей на любом сайте будет прочно ассоциироваться с автором/саппортом и т.п.
Я вводил дополнительное неключевое поле с ID, которое явно начиналось с 1 и было с автоинкрементом - работало нормально. Хотя можно в принципе при каждом обращении отнимать константу от этого "хоть 40 хоть 4000" - не пробовал, т.к. таблицы небольшие были, поэтому все равно. 

Автор: Feldmarschall 7.7.2008, 08:51
Что за глупость? какой ещё "контакт" и id=1? Какой ещё автор? Какое дело глупому юзеру до каких-то там циферок? 
словами написать, что это суппорт - нельзя?
или мы пишем свой контакт или боимся, что кто-то не догадается, что мы - автор, и круче всех?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)