2017-09-24 4 views
0

私は競争しているテーブルを管理していますが、現在は4列あります。長期的にmysqlの変更を追跡 - 折れ線グラフなどの作成

ID 
Name 
Tag 
Rating 

が効果的に、私は私のユーザー競争の中で自分のプレーの線グラフを提供するために、できるだけ長くのためのタグの変更(およびそれが変化していること、日付を)追跡したいです。

私はそれをやり遂げる方法を考えてみましたが、私の限られた知識で見つけることができるのは、最後の変更のみを保存する方法や、変更が加えられたときにテーブル全体を保存する方法です。私の場合、変更は個々のユーザー(行)に適用されるため、個別に追跡する必要があります。

ご協力いただければ幸いです。

編集:

サンプル

id | name  | tag | rating 
------------------------- 
1 | Khar  | 5  | 800 
2 | SantaCruz | 3  | 850 
3 | Sion  | 2  | 900 
4 | VT   | 1  | 758 
5 | newFort  | 4  | 535 
6 | Bandra  | 6  | 483 
7 | Worli  | 10 | 888 
8 | Sanpada  | 11 | 999 
9 | Joe   | 9  | 779 
10 | Sally  | 15 | 888 
11 | Elphiston | 17 | 525 
12 | Currey Road | 31 | 879 

タグは、効果的に、私は長期的に追跡したいランキングです。

希望の結果になると、私は何が可能かはわかりません。効果的に私はすべての個人(y軸:タグ、x軸:日付)の折れ線グラフを作成できるようにして、すべての変更とその日付を追跡する別のテーブルを作成したいと思います。

+0

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。 –

+0

が追加されました。十分に明確であることを願っています – copyleft

+0

あなたのデータは不完全です。データに日付列がありません。 MySQLは折れ線グラフを生成しません。データ、クエリ、または折れ線グラフを作成する方法について何か質問していますか? –

答えて

0

あなたはttbl(あなたの代わりに常にinsertそれらが任意の値を変更しませんが、決して!)別のテーブルで計算したタグ値を格納することができ:

tid | uid | tag | changed 
------------------------------------------ 
    1 | 1 | 5 | '2017-09-24T15:34:23' 
    2 | 1 | 8 | '2017-09-24T15:36:23' 
    3 | 2 | 3 | '2017-09-24T15:38:23' 
    4 | 3 | 2 | '2017-09-24T15:40:23' 
    5 | 4 | 1 | '2017-09-24T16:34:23' 
    6 | 5 | 4 | '2017-09-24T16:44:23' 
    7 | 1 | 5 | '2017-09-24T18:14:23' 
    8 | 6 | 6 | '2017-09-24T18:24:23' 
    9 | 1 | 9 | '2017-09-24T18:34:23' 
10 | 7 | 10 | '2017-09-24T18:44:23' 
11 | 1 | 5 | '2017-09-25T15:31:23' 
12 | 8 | 11 | '2017-09-25T15:32:23' 
13 | 9 | 9 | '2017-09-25T15:33:23' 
14 | 10 | 15 | '2017-09-25T15:34:23' 
15 | 11 | 17 | '2017-09-25T15:35:23' 
16 | 12 | 31 | '2017-09-25T15:36:23' 

注意を、それとはuid = 1つの変更のタグ値5から8,5,9、そして再び時間の経過とともに5に戻ります。

は今、特別にあなたは、このように時間に特定のカットオフポイントの最新の値を出し魚選択:

SELECT t.* FROM ttbl t 
INNER JOIN (SELECT uid i, max(changed) dt 
      FROM ttbl WHERE changed<'20170925' 
      GROUP BY uid) u ON i=uid AND dt=changed; 

ここで日付値'20170925'は、カットオフ時間を表しています。現在の評価値などでテーブルに参加してください。

あなたがここで少しデモを見つけることができます:http://rextester.com/GZNL52987

0

あなたは、別のテーブル内の順位値を格納するためにtriggerを使用することができます。 timestampが自動的に内部であなたのUPDATEの日付と時刻を格納するため

CREATE TRIGGER AFTER UPDATE ON `my_table_name` 
FOR EACH ROW 
BEGIN 
    IF NEW.tag <> OLD.tag THEN 
     INSERT INTO `tag_history` (tag, player) VALUES (NEW.tag, NEW.name); 
    END IF; 
END; 

がデフォルト値としてCURRENT_TIMESTAMPを持つ:このトリガーを使用して

CREATE TABLE `tag_history` (
    `id` int(11) NOT NULL, 
    `tag` int(8) NOT NULL, -- 8 seems to be enough for your needs 
    `player` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
); 

ALTER TABLE `tag_history` ADD PRIMARY KEY (`id`); 
ALTER TABLE `tag_history` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

私はこのような新しいテーブルを定義します行。

この質問にタグが付けられているため、PHPスクリプト内でテーブルを更新するときには、トリガーを使わなくても簡単にINSERT INTO tag_historyとすることができます。

これは、エントリのタイムスタンプがないため、グラフを描画する前にテーブルに将来の更新を保存する必要があることを意味します。

関連する問題