2013-12-23 2 views
0

Это может быть простой/конкретный вопрос, но мне действительно нужна помощь в этом. У меня две таблицы: Entry и Comment в базе данных SQL Server. Я хочу показать кол-во комментариев в таблица входа. И, конечно, количество комментариев будет увеличиваться при добавлении комментария. Две таблицы связаны следующим образом: Comment.EntryId = Entry.IdКомментарий к таблице ввода (SQL Query)

Entry стол:

CREATE TABLE [dbo].[Entry] (
    [Id]     INT   IDENTITY (1, 1) NOT NULL, 
    [Subject]    NVARCHAR (MAX) NOT NULL, 
    [Content]    NVARCHAR (MAX) NOT NULL, 
    [Type]    NVARCHAR (50) NOT NULL, 
    [SenderId]   NVARCHAR (50) NOT NULL, 
    [Date]    DATE   NOT NULL, 
    [Department]   NVARCHAR (50) NULL, 
    [Faculty]    NVARCHAR (50) NULL, 
    [ViewCount]   INT   DEFAULT ((0)) NOT NULL, 
    [SupportCount]  INT   DEFAULT ((0)) NOT NULL, 
    [CommentCount]  INT   DEFAULT ((0)) NOT NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

Comment стол:

CREATE TABLE [dbo].[Comment] (
    [Id]    INT   IDENTITY (1, 1) NOT NULL, 
    [EntryId]   INT   NOT NULL, 
    [SenderId]   NVARCHAR (50) NOT NULL, 
    [Date]    DATETIME  NOT NULL, 
    [Content]   NVARCHAR (MAX) NOT NULL, 
    [SupportCount]  INT   NOT NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

Я показываю записей в GridView в коде (C#). Вопрос в том, что я должен написать как запрос, чтобы сделать это наиболее эффективно? Спасибо за помощь.

+1

Действительно ли необходимо хранить комментарии? Почему бы не написать View, который его вычисляет? – okrumnow

+0

Если кажется, что CommentCount должен быть вычисленным столбцом в Entry, если вы действительно хотите, чтобы он был столбцом в базе данных вообще. –

+0

Я бы сказал, что вам нужно отбросить эти столбцы из этой таблицы 'SupportCount' и' CommentCount', поскольку они нарушают 3-ей нормальную форму, т. Е. Столбец в таблице должен зависеть только от первичного ключа. a 'View' должен выполнить задание –

ответ

3

Попробуйте это:

select e.Id,e.date,count(*) as NumComments 
from Entry e 
join comment c on c.entryId=e.id 
group by e.id,e.date 

Если не может быть никаких комментариев, попробуйте следующее

select e.Id,e.date,count(c.entryId) as NumComments 
from Entry e 
left join comment c on c.entryId=e.id 
group by e.id,e.date 
+0

спасибо, но я получил ошибку, например:' Столбец 'e.Date' недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. 'и мне нужно чтобы показать даты. – samet

+0

Показать даты записи или даты комментариев? Добавьте e.Date в SELECT и GROUP BY, чтобы решить сообщение об ошибке – Sparky

+0

спасибо, что он решил мою проблему :) – samet

0

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

А почему вы хотите commentcount в таблице (большинство таблиц есть что 1-многим и мы не использовали это). Если вы храните это в таблице, вы должны обновлять таблицу entry каждый раз, когда делается комментарий.

Смежные вопросы