如何获取列中值的数量?

时间:2013-02-25 05:11:20

标签: c# sql

我有一张名为tbl_company的表格。它有字段

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

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

我要展示的abc company页面中的示例

关注的人数不是4

我要展示的bbc company页面中的示例

关注的人数不是3

像这样我想要显示。我可以得到这个数......

由于

3 个答案:

答案 0 :(得分:7)

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

您应该规范化数据库,以便改为:

tbl_company
--------------
id   comp_name
1    abc
2    bbc
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>,那么最简单的解决方案是返回整个darn字符串并计算C#中的逗号(并添加1疗程)。

答案 1 :(得分: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

答案 2 :(得分: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;