回答編集履歴

6

修正

2017/09/01 04:31

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -54,8 +54,6 @@
54
54
 
55
55
  ) as `メッセージ登録日時`
56
56
 
57
- limit 10
58
-
59
57
  from `ユーザーテーブル` as usr
60
58
 
61
59
  order by rand()

5

修正

2017/09/01 04:31

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  order by rand() limit 1
54
54
 
55
- ) as `登録日時`
55
+ ) as `メッセージ登録日時`
56
56
 
57
57
  limit 10
58
58
 
@@ -64,7 +64,7 @@
64
64
 
65
65
  ) as v1 inner join `メッセージテーブル` msg
66
66
 
67
- on v1.`ユーザーid`=msg.`ユーザーid` and v1.`登録日時`=msg.`登録日時`
67
+ on v1.`ユーザーid`=msg.`ユーザーid` and v1.`メッセージ登録日時`=msg.`登録日時`
68
68
 
69
69
  ```
70
70
 

4

追記

2017/09/01 04:30

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -12,22 +12,62 @@
12
12
 
13
13
  ```SQL
14
14
 
15
- SELECT *
15
+ select *
16
16
 
17
17
  , (
18
18
 
19
- SELECT `メッセージ` FROM `メッセージテーブル`
19
+ select `メッセージ` from `メッセージテーブル`
20
20
 
21
- WHERE `ユーザーID`=usr.`ユーザーID`
21
+ where `ユーザーid`=usr.`ユーザーid`
22
22
 
23
- ORDER BY RAND() LIMIT 1
23
+ order by rand() limit 1
24
24
 
25
25
  ) as `メッセージ`
26
26
 
27
- FROM `ユーザーテーブル` as usr
27
+ from `ユーザーテーブル` as usr
28
28
 
29
- ORDER BY RAND()
29
+ order by rand()
30
30
 
31
- LIMIT 10
31
+ limit 10
32
32
 
33
33
  ```
34
+
35
+ メッセージテーブルの全体を取得したい場合は、メッセージテーブルの主キーに該当するものを取得すればいいのですが、この場合、ユーザーIDと登録日時だと思われるので、登録日時をサブクエリーで取得してさらに結合します。
36
+
37
+
38
+
39
+ ```SQL
40
+
41
+ select *
42
+
43
+ from (
44
+
45
+ select *
46
+
47
+ , (
48
+
49
+ select `登録日時` from `メッセージテーブル`
50
+
51
+ where `ユーザーid`=usr.`ユーザーid`
52
+
53
+ order by rand() limit 1
54
+
55
+ ) as `登録日時`
56
+
57
+ limit 10
58
+
59
+ from `ユーザーテーブル` as usr
60
+
61
+ order by rand()
62
+
63
+ limit 10
64
+
65
+ ) as v1 inner join `メッセージテーブル` msg
66
+
67
+ on v1.`ユーザーid`=msg.`ユーザーid` and v1.`登録日時`=msg.`登録日時`
68
+
69
+ ```
70
+
71
+
72
+
73
+

3

修正

2017/09/01 04:29

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ---
10
10
 
11
- 試してみていませんが、上記RAND()を使った手法で
11
+ 試してみていませんが、上記RAND()を使った手法で
12
12
 
13
13
  ```SQL
14
14
 

2

修正

2017/09/01 04:14

投稿

sazi
sazi

スコア25199

test CHANGED
@@ -24,8 +24,6 @@
24
24
 
25
25
  ) as `メッセージ`
26
26
 
27
- LIMIT 10
28
-
29
27
  FROM `ユーザーテーブル` as usr
30
28
 
31
29
  ORDER BY RAND()

1

追記

2017/09/01 04:13

投稿

sazi
sazi

スコア25199

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