2

では、4 列 3 行のデータがあるとしましょう。

|user_id|pick_1|pick_2|pick_3|
-------------------------------
|fred   |C++   |java  | php  |
------------------------------
|eric   |java  |C++   | php   |
------------------------------
|sam    | C++  | php  | java |
------------------------------

そのため、現在、ユーザーはお気に入りの言語を入力しています。最初の選択 (pick_1) はお気に入りのプログラミング言語になり、2 番目の選択 (pick_2) は 2 番目にお気に入りのプログラミング言語などになります。

プログラミング言語の列に応じてポイント値を与えることができるように、これをどのように整理できますか。したがって、pick_1 は 3 ポイント、pick_2 は 2 ポイント、pick_3 は 1 ポイントを与えることができます。

したがって、スコアを集計すると、C++ は 8 ポイント、java は 6 ポイント、php は 4 ポイントになります。

そうすれば、より好ましいプログラミング言語になりがちな全体的なランキングを示すことができます。そのようです

  |rank|language|points|
  ----------------------
  |  1 |  C++   | 8    |
  ----------------------
  |  2 |  java  | 6    |
  ----------------------
  |  3 |  php   | 4    |
  ----------------------

ポイントシステムを用意する必要さえありません。言語を好き嫌いの尺度でランク付けする別の方法が思い浮かびませんでした。同じ結果が得られる別の方法があれば教えてください。そうでなければ、どうすればこれができるでしょうか。できればMySqlだけで。私は現在PHPを使用しています。

読んでくれてありがとう。

4

2 に答える 2

3

もっとシンプルな構造が必要

User_ID | Pick | Points
Fred      c++     3
Fred      php     2
Fred      java    1

このようにして、簡単なことができますsum(points) group by pick

于 2013-09-05T07:15:59.520 に答える
1

SQL のみのソリューションの場合、構造を正規化し、ピックを別のテーブルに配置します。

users: user_id; user_name
picks: pick_id; user_id; language; points;

次に、データを 2 つのテーブルに格納します。

| user_id | user_name |
-----------------------
| 1       | Fred      |
-----------------------
| 2       | Eric      |
-----------------------
| 3       | Sam       |
-----------------------

| pick_id | user_id   | language | points    |
---------------------------------------------
| 1       | 1         | C++      | 1         |
---------------------------------------------
| 2       | 1         | Java     | 2         |
---------------------------------------------
| 3       | 1         | php      | 3         |
---------------------------------------------
| 4       | 2         | Java     | 1         |
---------------------------------------------
| 5       | 2         | C++      | 2         |
---------------------------------------------
| 6       | 2         | php      | 3         |
---------------------------------------------
| 7       | 3         | C++      | 1         |
---------------------------------------------
| 8       | 3         | Java     | 2         |
---------------------------------------------
| 9       | 3         | php      | 3         |
---------------------------------------------

次に、次のクエリを使用して目的の結果をフェッチします。

SELECT language, SUM(points) FROM users JOIN picks ON users.user_id=picks.user_id GROUP BY language

このフィドルに見られるように

このようにして、人々が同じ言語に複数回投票したり、2 つの異なる言語に同じ量の投票をしたりできないように、制約を追加することも簡単です。

于 2013-09-05T07:35:33.283 に答える