2013-02-25 20 views
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

這樣我想display.how我能得到這個數.....

感謝

+3

當問問題,請花時間和精力來拼正確地說話。 – 2013-02-25 05:12:49

回答

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 
+0

先生按照上述我寫入querySELECT標識, 公司, CASE WHEN CHAR_LENGTH(跟隨)> 0 THEN(CHAR_LENGTH(跟隨) - CHAR_LENGTH(REPLACE(追隨者, '', ''))+ 1) ELSE 0 END as followerCount FROM company_followers,但它顯示以下錯誤。我正在使用sql server 2008錯誤消息是消息195,級別15,狀態10,行3 'CHAR_LENGTH'不是公認的內置函數名稱。 – 2013-02-25 09:08:03

+0

你正在使用'MySQL'?你會得到什麼錯誤? – 2013-02-25 09:09:54

+0

Microsoft sqlserver 2008錯誤消息是消息195,級別15,狀態10,行3 'CHAR_LENGTH'不是一個公認的內置函數名稱。 – 2013-02-25 09:30:21

7

數據庫中的字段以逗號分隔的列表是笨拙,一般一個非常糟糕的主意。主要原因是它首先使用關係數據庫(例如索引,外鍵和連接)的原因完全無效。如果你絕對堅持了

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

你應該正常化您的數據庫,所以你不是有:

 
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這個模式,你應該先抱怨誰寫了它,如果可能的話<g>,那麼最簡單的解決方案是返回整個字符串並在C#中計算逗號(並且當然添加1)。

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; 
+0

先生,我是知道這件事...但它那已經完成....所以任何希望 在那兒? – 2013-02-25 07:28:43

+0

如果你需要保持這種設計,@JW。已經給出瞭解決方案。然而,我更願意在這個階段轉向新設計。儘管您已經插入了幾千行,但這並不是一個大問題。您可以編寫一個_sql語句_將這些數據移動到新表中。這只是您的不良數據庫設計中發生的一個小問題。你將有'更新''刪除'問題和可擴展性問題。所以,改變數據庫結構是最好的補救措施。請參閱[本](http://www.dreamincode.net/forums/topic/179103-relational-database-design-normalization/)。這解釋了它。 – chandimak 2013-02-25 07:39:56