2017-04-15 6 views
0

enter image description here私のデータベースの1つの行の中の好き嫌いと中立性の数を計算するには?

データベースの1つの行から各Likeの数値を表示するにはどうすればよいですか?例えば

:データベースから画像を

Like = 1 Neutral = 2 
+0

データベースの構造は何ですか?あなたはPHPやSQLで計算をしたいですか? –

+0

私は1好きと2中立を参照してください...私は間違っていますか?また、画像の代わりに書式付きのテキストを掲示してください –

+1

明らかに大型の 'SELECT case When This 'を書くことができますThisField =' Like 'then 1 else 0 end + CASE WHERE ThatField =' Like 'then 1 else 0 end + .. 「好き」として、そして同様に「中立者」として。しかし、このテーブル構造は非常によく、非リレーショナルなので、あなたはそのようなデザインで遠くに行くことはできません:-) –

答えて

1

まず毎のような、データベースの行の中性から数値を与えることができるPHPのページに結果を与えるであろう

、あなたのテーブルを再設計する。私はあなたのためにこれを行いますが、将来の努力のためには実際に見てください。normalisation

代わりに、各回答ごとに1つの行があります。それはあなたのサンプルには表示されていませんが、あなたの行のどこかに存在すると仮定します。このような構成によると

+----+------+------------+------------------+ 
| Id | User | QuestionID | QuestionResponse | 
+----+------+------------+------------------+ 
| 1 | 45 |   1 | Like    | 
| 2 | 45 |   2 | Neutral   | 
| 3 | 45 |   3 | Like    | 
| 4 | 46 |   1 | Dislike   | 
| 5 | 46 |   2 | Dislike   | 
+----+------+------------+------------------+ 

、あなたは、例えば、はるかに簡単に

カウントを実行することができます。

SELECT COUNT(QuestionResponse) FROM QuestionTable WHERE QuetstionResponse = 'Like' 

特定のユーザーが必要な場合は、最後にAND UserID = 46を追加します。

この表では、正規化が使用されています。データの重複があるため、ユーザーの詳細は別の表に格納されています。これらの行はすでに別の場所に存在するため、これらの行に個人情報を追加する必要はありません。結合を介してそのデータにアクセスできます。ユーザーテーブルが次のようになっているとします。

+----+----------+-----------+----------+ 
| Id | Username | FirstName | LastName | 
+----+----------+-----------+----------+ 
| 45 | Fbloggs | Fred  | Bloggs | 
| 46 | Charray | Charlotte | Harray | 
| 47 | Tmoseby | Ted  | Moseby | 
| 48 | Dknute | Deunan | Knute | 
+----+----------+-----------+----------+ 

あなたは参加によってユーザー情報にアクセスできます。

SELECT Users.Username, Count(QuestionResponse) FROM table 
INNER JOIN Users ON QuestionTable.User = Users.Id 
WHERE QuestionResponse = 'Like' 

これでしょう出力

+----------+-------+ 
| Username | Count | 
+----------+-------+ 
| Fbloggs |  2 | 
+----------+-------+ 
関連する問題