QA@IT
«回答へ戻る

回答を投稿

なにをselectの結果として残せていれば日本語化できるかわからなかったのでそのあたり適当ですが、
テーブルが分かれたままとして、unionを使う場合。

select * from
  (select user_id,action_time,item_id id,1 kind from GetItemHistory
     order by action_time desc limit 50)

union all

select * from 
  (select user_id,action_time,monster_id id,2 kind from AttackHistory
     order by action_time desc limit 50)

order by action_time desc limit 50

全部にlimit句がついているのは、履歴テーブルですとそこそこの件数になりそうですので、
unionの前に50件にしておくほうが作業域節約になるかなーと思ったまでです。
パフォーマンスにどの程度影響がでるかはインデックスにも左右されると思いますが、
一例として。

あと、結合後にどちらのテーブルだったかわかるようにkind列を追加してます。
上の例だと、kindが1だと、idはitem_idです。kindが2だと、idはmonster_idです。

なにをselectの結果として残せていれば日本語化できるかわからなかったのでそのあたり適当ですが、
テーブルが分かれたままとして、unionを使う場合。

```sql
select * from
  (select user_id,action_time,item_id id,1 kind from GetItemHistory
     order by action_time desc limit 50)

union all

select * from 
  (select user_id,action_time,monster_id id,2 kind from AttackHistory
     order by action_time desc limit 50)

order by action_time desc limit 50
```

全部にlimit句がついているのは、履歴テーブルですとそこそこの件数になりそうですので、
unionの前に50件にしておくほうが作業域節約になるかなーと思ったまでです。
パフォーマンスにどの程度影響がでるかはインデックスにも左右されると思いますが、
一例として。

あと、結合後にどちらのテーブルだったかわかるようにkind列を追加してます。
上の例だと、kindが1だと、idはitem_idです。kindが2だと、idはmonster_idです。