Объединение множества созданных пользователем элементов в один «общий» элемент - PullRequest
0 голосов
/ 15 декабря 2010

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

У меня есть структура базы данных из трех таблиц: users, entries, associations.

Таблицы имеют следующие поля:

пользователи
id | joined | email | salt | password

записи
id | created | creator | type | value

ассоциации
id | created | creator | type | node1 | node2

Вот функция сайта:

Пользователи, добавляющие элементы в свой инвентарь
Все созданные пользователем элементы входят в entriesс type предмета.Строка добавляется в associations с type'ладением ', node1 users.id и node2 records.id .Эта строка ассоциаций позволяет (используя записи INNER JOIN) извлекать и отображать инвентарь пользователя (а не просто извлекать все записи, где creator = users.id, поскольку пользователь может создать элемент, который ему не принадлежит).

Добавление атрибутов к элементам
Эта часть, кажется, отбрасывает всех, кому я объясняю вещи.«Атрибут» на самом деле просто еще один элемент.Таким образом, он в основном визуализирует созданную пользователем иерархию свободной формы.Например, вы можете пометить , по которому звонит колокол , с помощью «Книги», а «Книга» - это еще один предмет (независимо от того, находится он в инвентаре или нет).Чтобы сделать это, я просто добавляю еще одну строку в таблицу associations с type 'tag' и node1 records.id (родительский элемент) и node2 records.id («тег» или дочерний элемент).Помните, что запись также может быть URL, комментарием, фотографией и т. Д., Это будет зависеть от entries.type.Теперь я могу вытянуть все атрибуты предметов.Например, все фотографии: ($ item_id = страница, на которую я смотрю) "SELECT * FROM entries INNER JOIN associations ON associations.node1 = $item_id AND associations.node2 = entries.id AND entries.type = 'photo'.

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

Мой вопрос: как только у меня появилось много записей, созданных пользователем, например., «MacBook», как лучше всего объединить, объединить, объединить или, как бы вы ни называли, все эти отдельные элементы в один общий элемент, так что все эти фрагменты данных, созданные пользователями, могут быть одним знанием.кусок, если хотите.

Опять же, я не очень беспокоюсь о том, что пользователи вводят "mac book", "Apple Macbook" и т. д. В целом, эти пользователи просто делают это неправильно и не влияют на сообщество..

По сути, если пользователь, у которого нет MacBook, выполнил поиск и попал на страницу MacBook, он увидел бы самые популярные теги, некоторые фотографии (случайные, популярные, что угодно, это тривиально)., комментарии об этом, самый популярный URL и т. д.

Кроме того, большое спасибо, что нашли время, чтобы прочитать мое запутанное и подробное описание!:)

1 Ответ

1 голос
/ 15 декабря 2010

Иметь таблицу «Теги», которая будет иметь уникальное поле «Имя». Всякий раз, когда пользователь вводит новое имя, оно добавляется туда.

Каждый элемент должен быть связан с этой таблицей. Это звучит как множество элементов в одном теге, так что вам не понадобится таблица Item_Tags, просто внешний ключ Tag_Id в таблице Items.

Для комментариев у вас есть таблица комментариев, которая ссылается на эту таблицу.

Чтобы отобразить только 4 фотографии, вы делаете ВЫБОР фотографий, которые связаны с этим именем (предположительно, это фотографии элементов с таким именем) и LIMIT 4

Для других / похожих шаблонов дизайна выполните поиск вопросов, связанных с тегами, например this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...