如何获取列中值的个数
本文关键字:何获取 获取 | 更新日期: 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;