Получение содержимого из дополнительного содержимого - PullRequest
0 голосов
/ 19 февраля 2010

Я использую SQL Server 2k8 и у меня есть таблица, которая должна иметь возможность извлекать динамический контент.Итак, я думал о том, чтобы иметь 2 столбца, которые бы действовали как родитель и потомок.

ContentId - SubContentId - ContentInfo
100         100            data here
101         100            data here
102         100            data here
103         100            data here

Итак, хотя ContentId увеличивается, SubContentId относится к Parent ContentId, равному 100. Поэтому, если я выберу ContentId100, я бы проверил SubContentId для этого номера, чтобы получить все подробности для ContentId 100. Является ли этот подход разумным?Я в порядке?

Ответы [ 2 ]

1 голос
/ 19 февраля 2010

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

SELECT * FROM content where subcontentID = contentID AND contentID = @contentID

Результатами будут все записи контента с указанным идентификатором контента

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

SELECT * FROM content where subcontentID = contentID ORDER BY subcontentID,contentID

Это даст вам все записи контента, сохраняя все записи субконтента в порядке.

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

1 голос
/ 19 февраля 2010

Создание, настройка, тестирование:

CREATE TABLE #tmp (
    ContentID int, SubContentID int, ContentInfo varchar(255)
)

INSERT INTO #tmp VALUES (100, 100, 'info 1')
INSERT INTO #tmp VALUES (101, 100, 'info 2')
INSERT INTO #tmp VALUES (102, 100, 'info 3')
INSERT INTO #tmp VALUES (103, 100, 'info 4')
INSERT INTO #tmp VALUES (104, 100, 'info 5')

SELECT ContentInfo, 
          (SELECT ContentInfo + ',' as "data()"  
           FROM #tmp x 
           WHERE x.SubContentID = z.ContentID FOR XML PATH('')
          ) As [SubContent]  
FROM #tmp z
WHERE ContentID = 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...