回答編集履歴

5

推敲

2020/08/15 04:52

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -54,27 +54,27 @@
54
54
 
55
55
  select * from posts
56
56
 
57
- where post_kind = 1 --①
57
+ where post_kind = 1 --
58
58
 
59
59
  and (
60
60
 
61
- user_id = 2 --②
61
+ user_id = 2 --
62
62
 
63
63
  or id in (
64
64
 
65
- select post_id from follows where user_id=2 --③
65
+ select post_id from follows where user_id=2 --
66
66
 
67
67
  union all
68
68
 
69
- select post_id from keeps where user_id=2 --④
69
+ select post_id from keeps where user_id=2 --
70
70
 
71
71
  )
72
72
 
73
73
  )
74
74
 
75
- and is_trash = 0 --⑤
75
+ and is_trash = 0 --
76
76
 
77
- and user_id not in ( --⑥
77
+ and user_id not in ( --
78
78
 
79
79
  select user_id from blocks where user_ID2=2
80
80
 

4

追記

2020/08/15 04:51

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -21,3 +21,71 @@
21
21
  あなたの質問はぱっと見で性能を改善したいのが目的のように見えますが、本当は意図通りに抽出できていない事に対してではありませんか?
22
22
 
23
23
  もしそうなら、もっと要件が分かるように、希望する結果をサンプルとして質問に追記して下さい。
24
+
25
+
26
+
27
+ 追記
28
+
29
+ --
30
+
31
+ > ★ 取得条件
32
+
33
+ > ➀post_kind = 1 のもの
34
+
35
+ > AND
36
+
37
+ > 指定ユーザが ➁投稿したもの OR ➂フォローしたもの OR ➃保存したもの
38
+
39
+ >
40
+
41
+ > ☆ 除外条件
42
+
43
+ > ➄削除されたもの( is_trash=1 のもの )
44
+
45
+ > OR
46
+
47
+ > ➅ブロックした、されたユーザによるもの
48
+
49
+
50
+
51
+ 最終形が良く分からないので、上記条件に合わせてpostsを取得するとすると以下の様な記述になります。
52
+
53
+ ```SQL
54
+
55
+ select * from posts
56
+
57
+ where post_kind = 1 --①
58
+
59
+ and (
60
+
61
+ user_id = 2 --②
62
+
63
+ or id in (
64
+
65
+ select post_id from follows where user_id=2 --③
66
+
67
+ union all
68
+
69
+ select post_id from keeps where user_id=2 --④
70
+
71
+ )
72
+
73
+ )
74
+
75
+ and is_trash = 0 --⑤
76
+
77
+ and user_id not in ( --⑥
78
+
79
+ select user_id from blocks where user_ID2=2
80
+
81
+ union all
82
+
83
+ select user_id2 from blocks where user_ID=2
84
+
85
+ )
86
+
87
+ ```
88
+
89
+ これを結合条件に直したとしても、質問に記載されたSQLにはなりません。
90
+
91
+ なので、質問にあるSQLで本当に得たい結果になっているかどうかが疑問なのです。

3

推敲

2020/08/14 07:49

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -18,4 +18,6 @@
18
18
 
19
19
  チューニングの前に、それらを整理する必要があると思います。
20
20
 
21
+ あなたの質問はぱっと見で性能を改善したいのが目的のように見えますが、本当は意図通りに抽出できていない事に対してではありませんか?
22
+
21
- の整理がついていい事も含めての質問なら、もっと要件が分かるように、希望する結果をサンプルとして質問に追記して下さい
23
+ もしなら、もっと要件が分かるように、希望する結果をサンプルとして質問に追記して下さい

2

追記

2020/08/14 04:02

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -17,3 +17,5 @@
17
17
 
18
18
 
19
19
  チューニングの前に、それらを整理する必要があると思います。
20
+
21
+ その整理がついていない事も含めての質問なら、もっと要件が分かるように、希望する結果をサンプルとして質問に追記して下さい

1

推敲

2020/08/14 03:57

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  先ずテーブルの定義において、keepsテーブルとして独立させる意味はありますか?
4
4
 
5
- postsはid一意なのだから、保存した日を持たせるにしてもpostsに持てば済む話だと思います。
5
+ postsはid一意なのだから、保存した日を持たせるにしてもpostsに持てば済む話だと思います。
6
6
 
7
7
 
8
8