Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Работа с TEXT-строкой.


Автор: avlzll 15.6.2010, 20:37
Всем привет.

В образовательных целях пишу простенькую читалку РСС. Принял решение в базе хранить две таблицы: юзеры и, собственно, рсс фиды.

Код

CREATE TABLE rss_feeds (
        rss_feed_id INT NOT NULL AUTO_INCREMENT,
        url TEXT NOT NULL,
        name TEXT NOT NULL,
        last_update TIMESTAMP,
        users TEXT NULL,
        PRIMARY KEY (rss_feed_id)
);


То есть, таблица должна хранить URL фида (url), его название (name) и список юзеров (users), которые на этот фид подписались. Собственно, вопрос вот в чем. Как правильно с этим списком юзеров работать? (Список может выглядеть как: [user1 user2 user3 user4 user5] etc.)
Например, как правильно этот список формировать? Если юзер добавляет уже существующий фид в базе, мы не создаем новый фид, а просто приписываем его ник/id в строку users этого фида (те кто уже читает + этот новый user). Сделать select всех юзеров в переменную + добавить одного нового и сделать update? Как-то кривовато кажется. 
Далее, если затем выбирать все фиды, который читает конкретный юзер, запрос нужно делать с применением LIKE % % ?

Буду рад пинку в правильную сторону. smile Спасибо. 

Автор: bars80080 15.6.2010, 23:08
Цитата(avlzll @  15.6.2010,  20:37 Найти цитируемый пост)
Сделать select всех юзеров в переменную + добавить одного нового и сделать update? Как-то кривовато кажется. 
Далее, если затем выбирать все фиды, который читает конкретный юзер, запрос нужно делать с применением LIKE % % ?

вы собственно обнаружили две базовых кривизны такого подхода.
решается она просто - создаётся ещё одна таблица:
id int, id_iser int, id_rss_fid int
одна подписка - один пользователь. и редактирование удобно, и выборка, и поиск очень быстрый

Автор: avlzll 15.6.2010, 23:50
Действительно. Так куда более логичнее и правильнее. Выборка значительно удобнее в таком случае.
Единственное, в случае, если добавляемого фида в базе нет, надо делать два insert-запроса (один в таблицу с фидами, другой в таблицу с подписками). Хотя в первом варианте не лучше с этим.
Спасибо!

Автор: GZep 15.6.2010, 23:55
avlzll, простите, немного офф...

но все же, зачем в таблице, которая называется rss_feeds называть поле rss_feed_id? почему не просто id, по аналогии с другими полями?

Автор: avlzll 16.6.2010, 00:23
Цитата(GZep @ 15.6.2010,  23:55)
avlzll, простите, немного офф...

но все же, зачем в таблице, которая называется rss_feeds называть поле rss_feed_id? почему не просто id, по аналогии с другими полями?

Да это чисто тестовый вариант. Переделаем все по-человечески smile

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