[質問:MySQL] 使用者 ログ テーブルで, 各 使用者別 最新 ログだけ 1竝びずつ, 団 たいてい 番(回)の クイーリーで 持って来ようとすれば?
下と ような DB テーブルが ある. id_person科 id_classを 連結する relation テーブルだ. 半分が 変わる のを 記録して 累積する.
見れば 卵 数 あるが, 1番(回) id_person銀 2半分であって 4半分であって 1半分が いい.
2番(回) id_person銀 3半分であって 1半分が いい.
id | id_person | id_class | date_written |
53 | 1 | 1 | 2012-04-05 16:40 |
50 | 1 | 4 | 2012-04-05 16:02 |
1 | 1 | 2 | 2012-03-30 17:56 |
2 | 2 | 3 | 2012-03-30 17:56 |
51 | 2 | 1 | 2012-04-05 16:36 |
3 | 3 | 4 | 2012-03-30 17:56 |
52 | 3 | 1 | 2012-04-04 16:37 |
4 | 4 | 5 | 2012-03-30 17:56 |
5 | 5 | 6 | 2012-03-30 17:56 |
6 | 6 | 7 | 2012-03-30 17:56 |
7 | 7 | 1 | 2012-03-30 17:56 |
8 | 8 | 2 | 2012-03-30 17:56 |
9 | 9 | 3 | 2012-03-30 17:56 |
定木, ところが 今 抜こうとする データは 各 id_person これ 今 何 半分か する ことだ.
サーブクイーリーで すれば なるが…
これ テーブルのみを 土台で それを 抜く 数 あるか? あった. 下のように クイーリーを 使う ことだ.
SELECT p.* FROM `person_class_relation_table` AS p WHERE date_written=(SELECT MAX(date_written) FROM person_class_relation_table WHERE id_person = p.id_person)
こんなに サーブクイーリーを 使えば 求める 数 ある. ところが リストが 多くなれば 深刻な 性能 低下 現象が 起る ことだ.
質問 – サーブクイーリーを 使うの なくて 求める 数 ある 方法は?
サーブクイーリーを 使うの なくて 求める 数 ある 方法は 何が あるか?
私が 試みた 方法は 下の クイーリーだ.
SELECT *, MAX(date_written) FROM person_class_relation_table GROUP BY id_person
こんなに するから 親切に id_personで グループが 建てられて 出たし, date_written 項目は 違う データたちと 何らの 構わずに そのまま 最高値だけ 出た. すなわち, id_person 1番(回)は 1半分だと するのに 2半分だと 出た. ところが date_written銀 最新値. OTL;; やっぱりGROUP BY増えた id_personを 基準で グループだけ 作って 与える やつだった のだ…
次では こんなに 日 見たが 作動するの なかった.
SELECT * FROM person_class_relation_table GROUP BY id_person WHERE date_written = MAX(date_written)
4番(回) 竝びが 間違い 表示された. あのように くぎ 使うという エラーが 出た ことだ そのまま.
ヨトンガンに, そのため 故水気たち頃 質問させていただく. 私が MySQLに 本当 脆弱だという のを 今更 感じながら 質問する.
**これ 場合 代替 どうに すると しようか?! **(ような 内容を PHP Schoolに 質問した.)
PHPSchoolで 草の葉っぱ 様が 日 準 返事
サーブクイーリー なく 求める 方法は ない の ようです.
いっそ 状態フィールドを 一つ もっと 入力して
insert時 新しい データは 状態 フィールド = 1 路 入力して,
同一 id_personこれ 存在すれば 過去 データの 状態フィールド = 0で update させる のが 望ましくて 見えます.
それでは 敢えて group byを 夏至 ないとしても where 状態フィールド = 1 だけでも 願う 效果を 得る 数 あろう 見ます.勿論 select街 もっと 頻繁に 起きて update?増えた 自主 起きるの ないという 条件の下で 話です.
こんなに する 蟹 ましな の ようだ.
下は table 生成 クイーリーだ. 参考すれば なる.
-- -- テーブル 構造 `person_class_relation_table` -- CREATE TABLE IF NOT EXISTS `person_class_relation_table` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `id_person` int(11) NOT NULL COMMENT 'id_person', `id_class` int(11) NOT NULL COMMENT 'id_class', `date_written` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入力日時', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=54 ; -- -- テーブルの ダンプ データ `person_class_relation_table` -- INSERT INTO `person_class_relation_table` (`id`, `id_person`, `id_class`, `date_written`) VALUES (1, 1, 2, '2012-03-30 17:56:58'), (2, 2, 3, '2012-03-30 17:56:58'), (3, 3, 4, '2012-03-30 17:56:58'), (4, 4, 5, '2012-03-30 17:56:58'), (5, 5, 6, '2012-03-30 17:56:58'), (6, 6, 7, '2012-03-30 17:56:58'), (7, 7, 1, '2012-03-30 17:56:58'), (8, 8, 2, '2012-03-30 17:56:58'), (9, 9, 3, '2012-03-30 17:56:58'), (10, 10, 4, '2012-03-30 17:56:58'), (11, 11, 5, '2012-03-30 17:56:58'), (12, 12, 6, '2012-03-30 17:56:58'), (13, 13, 7, '2012-03-30 17:56:58'), (14, 14, 1, '2012-03-30 17:56:58'), (15, 15, 2, '2012-03-30 17:56:58'), (16, 16, 3, '2012-03-30 17:56:58'), (17, 17, 4, '2012-03-30 17:56:58'), (18, 18, 5, '2012-03-30 17:56:58'), (19, 19, 6, '2012-03-30 17:56:58'), (20, 20, 7, '2012-03-30 17:56:58'), (21, 21, 1, '2012-03-30 17:56:58'), (22, 22, 2, '2012-03-30 17:56:58'), (23, 23, 3, '2012-03-30 17:56:58'), (24, 24, 4, '2012-03-30 17:56:58'), (25, 25, 5, '2012-03-30 17:56:58'), (26, 26, 6, '2012-03-30 17:56:58'), (27, 27, 7, '2012-03-30 17:56:58'), (28, 28, 1, '2012-03-30 17:56:58'), (29, 29, 2, '2012-03-30 17:56:58'), (30, 30, 3, '2012-03-30 17:56:58'), (31, 31, 4, '2012-03-30 17:56:58'), (32, 32, 5, '2012-03-30 17:56:58'), (33, 33, 6, '2012-03-30 17:56:58'), (34, 34, 7, '2012-03-30 17:56:58'), (35, 35, 1, '2012-03-30 17:56:58'), (36, 36, 2, '2012-03-30 17:56:58'), (37, 37, 3, '2012-03-30 17:56:58'), (38, 38, 4, '2012-03-30 17:56:58'), (39, 39, 5, '2012-03-30 17:56:58'), (40, 40, 6, '2012-03-30 17:56:58'), (41, 41, 7, '2012-03-30 17:56:58'), (42, 42, 1, '2012-03-30 17:56:58'), (43, 43, 2, '2012-03-30 17:56:58'), (44, 44, 3, '2012-03-30 17:56:58'), (45, 45, 4, '2012-03-30 17:56:58'), (46, 46, 5, '2012-03-30 17:56:58'), (47, 47, 6, '2012-03-30 17:56:58'), (48, 48, 7, '2012-03-30 17:56:58'), (49, 49, 1, '2012-03-30 17:56:58'), (50, 1, 4, '2012-04-05 16:02:07'), (51, 2, 1, '2012-04-05 16:36:49'), (52, 3, 1, '2012-04-04 16:37:09'), (53, 1, 1, '2012-04-05 16:40:25');
- コメント機能はありません。コメントの代わりに[email protected]
にメールを送ってください。