0

我有一张桌子叫tbl_company. 它有字段

id  comp_name     followers
 1    abc         15,23,88,99
 2    bbc         1,10,66

在关注者字段中,我正在保存关注该公司的员工的员工 ID。这工作正常。在代码后面,每个公司页面,我想显示有多少粉丝

abc company我想显示的页面中的示例

没有关注的人是 4

bbc company我想显示的页面中的示例

没有关注的人是 3

像这样我想显示。我怎么能得到这个计数.....

谢谢

4

3 回答 3

7

数据库字段中的逗号分隔列表很笨拙,通常是一个非常糟糕的主意。主要原因是它完全否定了首先使用关系数据库的原因(例如索引、外键和连接)。

您应该规范化您的数据库,以便您拥有:

tbl_company
--------------
id comp_name
1个ABC
2 英国广播公司
company_followers
----------------------
company_id follower_id
1 15
1 23
1 88
1 99
2 1
2 10
2 66

然后您可以简单地执行以下 SQL:

SELECT COUNT(1)
FROM company_followers
WHERE company_id = @company_id

如果你完全被这个模式所困扰,你应该首先向编写它的人抱怨,如果可能的话<g>,那么最简单的解决方案是返回整个该死的字符串并计算 C# 中的逗号(当然还要加 1)。

于 2013-02-25T05:16:54.310 回答
1

这是TSQL版本,

SELECT  ID, 
        Comp_name, 
        CASE WHEN LEN(followers) > 0
             THEN (LEN(followers) - LEN(REPLACE(followers, ',', '')) + 1)
             ELSE 0
        END as FollowerCount 
FROM    tableName

MySQL

SELECT  ID, 
        Comp_name, 
        CASE WHEN CHAR_LENGTH(followers) > 0
             THEN (CHAR_LENGTH(followers) - CHAR_LENGTH(REPLACE(followers, ',', '')) + 1)
             ELSE 0
        END as FollowerCount 
FROM    tableName
于 2013-02-25T05:13:50.290 回答
0

这不是一个好的数据库设计。使用这种表结构,您必须三思而后行。这可以进一步规范化。如果您一开始没有正确执行此操作,则可能会在以后导致问题并且不可扩展。因此,如果您可以更改表结构会更好。

具有新表结构的数据将如下所示。

公司表:

id     comp_name
1      abc
2      bbc

company_follower 表:

company_id     follower
1              15
1              23
1              88
1              99
2              1
2              10
2              66

那么您对结果的查询是,

SELECT COUNT(company_id)
  FROM company_follower
  WHERE company_id = @company_id;
于 2013-02-25T05:22:25.190 回答