我正在尝试制作一个列表,在论坛上显示我的所有类别。显示类别名称,带有ID以及计数,计算附加到此类别的线程数。
它完美无缺,然而,它会将结果打印两次。
这是SQL
SELECT categories.category_name, threads.thread_category_id, COUNT(*)
AS 'threadCount' FROM threads
INNER JOIN categories ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, threads.thread_category_id
结果如下
正如你所看到的,它打印两次同样的东西,它不应该。
编辑:这是ASP。
<asp:Repeater ID="categories" runat="server">
<HeaderTemplate>
<table id="kategorier" cellspacing="0">
<tr>
<td class="head">Name</td>
<td class="head" style="width:70px">Number of Threads</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="item"><a href="Kategori.aspx?id=<%# Eval("thread_category_id") %>"><%# Eval("category_name") %> - ID: <%# Eval("thread_category_id")%></a></td>
<td class="item" style="text-align:right"><%# Eval("threadCount") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
答案 0 :(得分:3)
如果您的ASP正确,基本上你有2个地方可以复制行:
1)SQL错误(可能你必须使用DISTINCT运算符)
2)C#代码错误(可能你必须检查你的数据源)
检查你的SQL。并与我们分享您的C#代码。
使用此
SELECT distinct category_name, thread_category_id, threadCount
FROM
( SELECT categories.category_name, threads.thread_category_id, COUNT(*)
AS 'threadCount' FROM threads
INNER JOIN categories ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, threads.thread_category_id ) A
答案 1 :(得分:0)
使用Distinct .its删除所有重复的行
SELECT DISTINCT(threads.thread_category_id), categories.category_name, COUNT(*)
AS 'threadCount' FROM threads
INNER JOIN categories ON categories.category_id = threads.thread_category_id
GROUP BY threads.thread_category_id