我有一张名为tbl_company
的表格。它有字段
id comp_name followers
1 abc 15,23,88,99
2 bbc 1,10,66
在关注者字段中,我正在保存关注该公司的员工ID。这很好用。在代码背后,每个公司页面,我想显示有多少粉丝拥有它们
我要展示的abc company
页面中的示例
关注的人数不是4
我要展示的bbc company
页面中的示例
关注的人数不是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;