如何获取列中值的个数

本文关键字:何获取 获取 | 更新日期: 2023-09-27 18:01:09

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

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

在关注者字段中,我保存关注该公司的员工的id。这很好用。在代码背后,每个公司页面,我想显示有多少追随者有他们

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

关注人数为4

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

关注人数为3

像这样,我想显示。我怎样才能得到这个计数。。。。。

感谢

如何获取列中值的个数

数据库字段中以逗号分隔的列表很难处理,而且通常是一个非常糟糕的主意。主要原因是它完全取消了最初使用关系数据库(例如索引、外键和联接(的理由。

你应该规范化你的数据库,这样你就有了:

tbl公司--------------id comp_name1 abc2 bbc
company_followers----------------------company_id follower_id1 151 231 8819992 12 102 66

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

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

如果你完全拘泥于这个模式,如果可能的话,你应该首先向写它的人抱怨<g>,那么最简单的解决方案是返回整个该死的字符串并计算C#中的逗号(当然还有加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
  • SQLFiddle演示

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
  • SQLFiddle演示

这不是一个好的数据库设计。使用这种表结构时,您必须三思而后行。这可以进一步规范化。如果你一开始没有正确地做到这一点,以后可能会出现问题,而且无法扩展。所以,如果你能改变表的结构会更好。

使用新的表结构,数据将如下所示。

公司表格:

id     comp_name
1      abc
2      bbc

company_下表:

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;