teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

修正

2017/09/01 04:31

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -26,7 +26,6 @@
26
26
  where `ユーザーid`=usr.`ユーザーid`
27
27
  order by rand() limit 1
28
28
  ) as `メッセージ登録日時`
29
- limit 10
30
29
  from `ユーザーテーブル` as usr
31
30
  order by rand()
32
31
  limit 10

5

修正

2017/09/01 04:31

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -25,12 +25,12 @@
25
25
  select `登録日時` from `メッセージテーブル`
26
26
  where `ユーザーid`=usr.`ユーザーid`
27
27
  order by rand() limit 1
28
- ) as `登録日時`
28
+ ) as `メッセージ登録日時`
29
29
  limit 10
30
30
  from `ユーザーテーブル` as usr
31
31
  order by rand()
32
32
  limit 10
33
33
  ) as v1 inner join `メッセージテーブル` msg
34
- on v1.`ユーザーid`=msg.`ユーザーid` and v1.`登録日時`=msg.`登録日時`
34
+ on v1.`ユーザーid`=msg.`ユーザーid` and v1.`メッセージ登録日時`=msg.`登録日時`
35
35
  ```
36
36
 

4

追記

2017/09/01 04:30

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -5,13 +5,32 @@
5
5
  ---
6
6
  試してみていませんが、上記中RAND()を使った手法で
7
7
  ```SQL
8
- SELECT *
8
+ select *
9
9
  , (
10
- SELECT `メッセージ` FROM `メッセージテーブル`
10
+ select `メッセージ` from `メッセージテーブル`
11
- WHERE `ユーザーID`=usr.`ユーザーID`
11
+ where `ユーザーid`=usr.`ユーザーid`
12
- ORDER BY RAND() LIMIT 1
12
+ order by rand() limit 1
13
13
  ) as `メッセージ`
14
- FROM `ユーザーテーブル` as usr
14
+ from `ユーザーテーブル` as usr
15
- ORDER BY RAND()
15
+ order by rand()
16
- LIMIT 10
16
+ limit 10
17
- ```
17
+ ```
18
+ メッセージテーブルの全体を取得したい場合は、メッセージテーブルの主キーに該当するものを取得すればいいのですが、この場合、ユーザーIDと登録日時だと思われるので、登録日時をサブクエリーで取得してさらに結合します。
19
+
20
+ ```SQL
21
+ select *
22
+ from (
23
+ select *
24
+ , (
25
+ select `登録日時` from `メッセージテーブル`
26
+ where `ユーザーid`=usr.`ユーザーid`
27
+ order by rand() limit 1
28
+ ) as `登録日時`
29
+ limit 10
30
+ from `ユーザーテーブル` as usr
31
+ order by rand()
32
+ limit 10
33
+ ) as v1 inner join `メッセージテーブル` msg
34
+ on v1.`ユーザーid`=msg.`ユーザーid` and v1.`登録日時`=msg.`登録日時`
35
+ ```
36
+

3

修正

2017/09/01 04:29

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  追記
5
5
  ---
6
- 試してみていませんが、上記RAND()を使った手法で
6
+ 試してみていませんが、上記RAND()を使った手法で
7
7
  ```SQL
8
8
  SELECT *
9
9
  , (

2

修正

2017/09/01 04:14

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -11,7 +11,6 @@
11
11
  WHERE `ユーザーID`=usr.`ユーザーID`
12
12
  ORDER BY RAND() LIMIT 1
13
13
  ) as `メッセージ`
14
- LIMIT 10
15
14
  FROM `ユーザーテーブル` as usr
16
15
  ORDER BY RAND()
17
16
  LIMIT 10

1

追記

2017/09/01 04:13

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,2 +1,18 @@
1
1
  幾つかの手法があります。
2
- こちら([MySQLでランダムにレコードを取得する場合の手法](http://qiita.com/iri/items/b82795b6a3c0a8df62a5))が参考になるかと。
2
+ こちら([MySQLでランダムにレコードを取得する場合の手法](http://qiita.com/iri/items/b82795b6a3c0a8df62a5))が参考になるかと。
3
+
4
+ 追記
5
+ ---
6
+ 試してみていませんが、上記でRAND()を使った手法で
7
+ ```SQL
8
+ SELECT *
9
+ , (
10
+ SELECT `メッセージ` FROM `メッセージテーブル`
11
+ WHERE `ユーザーID`=usr.`ユーザーID`
12
+ ORDER BY RAND() LIMIT 1
13
+ ) as `メッセージ`
14
+ LIMIT 10
15
+ FROM `ユーザーテーブル` as usr
16
+ ORDER BY RAND()
17
+ LIMIT 10
18
+ ```