Вопрос по БД и PHP

12
syrpo
На сайте с 20.03.2009
Offline
104
1104

Здравствуйте,

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

каждая страница хранится в БД и имеет свой id

также в БД есть таблица пользователей

вопрос - в каком формате лучше хранить id-шники страниц в поле Pages таблицы Users, чтобы потом было удобней совершать различные операции (удаление, добавление новых id в это поле), и какие функции php следует использовать?

M2
На сайте с 11.01.2011
Offline
342
#1

syrpo,

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

------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
kkolorid
На сайте с 14.01.2013
Offline
14
#2

Соглашусь с прошлым автором. И потом просто делаете запрос SELECT idpage WHERE iduser='$user' и создаете массив. Просто вы еще функции попросили, как то странно...

siv1987
На сайте с 02.04.2009
Offline
427
#3

Или же через запятую указывать айдишники. Удаление и добавление можно делать в php.

M
На сайте с 07.07.2013
Offline
0
#4
syrpo:
вопрос - в каком формате лучше хранить id-шники страниц в поле Pages таблицы Users, чтобы потом было удобней совершать различные операции (удаление, добавление новых id в это поле), и какие функции php следует использовать?

проще хранить в serialized-виде, используя функции serialize и unserialize, так же, в этом случае, можно хранить ещё и дополнительную информацию, для которой не нужна отдельная сущность в БД

IL
На сайте с 20.04.2007
Offline
435
#5
siv1987:
Или же через запятую указывать айдишники. Удаление и добавление можно делать в php.

"по науке" связь многие-ко-многим в реляционных БД правильно делать через отдельную таблицу.. Ну а "можно" - как угодно =) Хоть в файлике.

p.s. В mongodb, например, можно прямо в таблице юзеров хранить.. :)

mentalix:
так же, в этом случае, можно хранить ещё и дополнительную информацию, для которой не нужна отдельная сущность в БД

Дополнительная информация вполне себе укладывается в третье (при необходимости - в четвёртое и тд) поле в таблице связей (id_user, id_post, data)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
BG
На сайте с 10.11.2012
Offline
5
#6
mentalix:
проще хранить в serialized-виде, используя функции serialize и unserialize, так же, в этом случае, можно хранить ещё и дополнительную информацию, для которой не нужна отдельная сущность в БД

Никогда не храните данные в сериализованном виде без жесткой на то необходимости. Лишняя нагрузка при выборе по параметрам из базы данных при высоконагруженном проекте может со временем сыграть с вами плохую шутку.

M
На сайте с 07.07.2013
Offline
0
#7
BenGi:
Никогда не храните данные в сериализованном виде без жесткой на то необходимости.

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

syrpo
На сайте с 20.03.2009
Offline
104
#8
siv1987:
Или же через запятую указывать айдишники. Удаление и добавление можно делать в php.

я вот как раз склонялся к этому - все id хранятся в 1 поле через запятую, а потом SELECT WHERE id IN($user_pages). Но тогда возникает проблема, с тем, как редактировать это поле БД при удалении\добавлении страниц, получается не очень удобно.

Либо все же сделать отдельную таблицу для хранения избранный страниц, как думаете?

siv1987
На сайте с 02.04.2009
Offline
427
#9
syrpo:
Но тогда возникает проблема, с тем, как редактировать это поле БД при удалении\добавлении страниц, получается не очень удобно.

Не вижу здесь какой-то проблемы. У вас строка которую можно разбить в массив, там удаляете или добавляете нужные элементы. Потом склеиваете массив обратно в строку.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#10

Не надо велосипедов.

Делаем 3-ью таблицу

user_id, page_id[, date(дата добавления), и прочее по желанию]

и не морочим себе голову.

Получить все страницы, которые есть у юзера (SELECT page_id FROM this_table WHERE user_id='№юзера').

Самая популярная страница - (SELECT count(*) as cnt, page_id FROM this_table GROUP BY page_id ORDER BY cnt DESC LIMIT 1)

Подпись))
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий