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

このように表示したいのですが、どうすればこのカウントを取得できますか.....

ありがとう

4

3 に答える 3

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>、次に最も簡単な解決策は、ダーン文字列全体を返し、C#でコンマを数えることです(もちろん1を追加します)。

于 2013-02-25T05:16:54.310 に答える
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
于 2013-02-25T05:13:50.290 に答える
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;
于 2013-02-25T05:22:25.190 に答える