1

私はMYSQLでいくつかのデータ分析を行っており、次のことが可能になることを望んでいます。

次のように、ユーザーのブログのトピックを文書化した表があります。合計 25 のトピックがあり、これを十分に抽象化して、後でトピックを追加し、クエリをやり直す必要がないようにしたいと考えています (可能な場合)。

-----------------------
| user_id |  topic    |
-----------------------
|   01    |  art      | 
|   01    |  cooking  |
|   02    |  art      | 
|   03    |  outdoors |
|   03    |  art      |
|   03    |  cooking  |
-----------------------

このデータからコード ダイアグラム ( http://bl.ocks.org/4062006 ) を作成するには、行を 2 つのトピックでグループ化するか、マトリックスを作成して、2 つのトピック間の関係を分析する必要があります。

-----------------------------------------
| topic_combo            |  user_cnt    |
-----------------------------------------
|   art + cooking        |  2           | 
|   art + outdoors       |  1           |
|   cooking + outdoors   |  1           | 
-----------------------------------------

または、さらに良い...

---------------------------------------------
|          |  art  |  cooking  |  outdoors  |
---------------------------------------------
| art      |   3   |    2      |     1      |
| cooking  |   2   |    2      |     1      |
| outdoors |   1   |    1      |     1      |
---------------------------------------------

これらのいずれかが MYSQL で可能ですか? もしそうなら、それらを行う最も簡単な方法は何ですか?

4

2 に答える 2

3

まあ、これが最善の方法かどうかはわかりませんが、少なくともより良い答えが得られるまでは、これが 1 つの方法です。Guvante が述べたように、JOIN と GROUP BY を使用します。

SELECT a.topic AS at, b.topic AS bt, COUNT(*) AS c FROM a JOIN a AS b ON a.user_id=b.user_id GROUP BY a.topic, b.topic;

これにより、次のような出力が得られます。

at          bt          c
-----------------------------
art         art         3
art         cooking     2
art         outdoors    1
cooking     art         2
cooking     cooking     2
cooking     outdoors    1
outdoors    art         1
outdoors    cooking     1
outdoors    outdoors    1

PHPなどでマトリックスに変換できます

while($data = mysql_fetch_object($sql)) {
  $matrix[$data->at][$data->bt] = $data->c;
}

編集:友人のヒントの後にコメントに記載されているように重複を削除しました。

于 2012-11-14T20:24:41.777 に答える
1

可能であるはずですが、主な質問は実装になりますが、これはあなたが言ったように難しい部分です。

正しい道を歩むために、すべてのトピックを含む一時テーブルを作成してみてください。

もう1つのヒントはFROM、そのテーブルとJOIN同じテーブルからを実行して、すべての組み合わせのセットを作成できることです。次にGROUP BY、最初のバージョンでを実行することにより、2番目のバージョンから結果を取得するクエリを作成できます。

最後に、これをモジュール化する場合は、名前付き列を含む結果セットを返すことができるように、クエリ作成を行うのがおそらく最も簡単です。

于 2012-11-14T20:04:46.360 に答える