回答編集履歴

2

抜けがあったので訂正

2018/01/01 14:53

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -40,9 +40,9 @@
40
40
 
41
41
  from message
42
42
 
43
- where message_to_member_no=member.member_no
43
+ where (message_to_member_no=member.member_no and message_from_member_no=$member_no)
44
44
 
45
- or message_from_member_no=member.member_no
45
+ or (message_from_member_no=member.member_no and message_to_member_no=$member_no)
46
46
 
47
47
  limit 1
48
48
 
@@ -59,3 +59,9 @@
59
59
  joinした結果menber_noが同一のものが複数返ってしまい、それを消すためにさらにgroupbyを重ねる
60
60
 
61
61
  ということをしてしまうからです。上記の解釈で正しいとするとgroupbyは不要になります。
62
+
63
+
64
+
65
+ $member_noの記述を忘れていましたので修正。
66
+
67
+ 「特定の人へメッセージを送信(または受信)してくれた会員一覧」ですね。

1

追記による訂正

2018/01/01 14:53

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -9,3 +9,53 @@
9
9
  SQL的にはmessageテーブルを主体にするならば「where句にmessage_to_member_noまたは
10
10
 
11
11
  message_from_member_noが$member_no」というのがまず最初に来ると思います。
12
+
13
+
14
+
15
+ 追記
16
+
17
+ 「メッセージを送信(または受信)してくれた会員一覧」ということで。
18
+
19
+ ・表示したいテーブルはmember
20
+
21
+ ・memberの検索条件として「messageテーブルの送受信者として履歴がある」
22
+
23
+ ということだとするとこんな感じです。
24
+
25
+
26
+
27
+ ```SQL
28
+
29
+ select member.member_no,
30
+
31
+ member.member_id,
32
+
33
+ member.member_name
34
+
35
+ from member
36
+
37
+ where exists(
38
+
39
+ select 0
40
+
41
+ from message
42
+
43
+ where message_to_member_no=member.member_no
44
+
45
+ or message_from_member_no=member.member_no
46
+
47
+ limit 1
48
+
49
+ )
50
+
51
+ ```
52
+
53
+ mysqlの文法にはそれほど強くないので違っているかもしれませんが、SQL的に
54
+
55
+ 表示したいデータ「from」「join」と検索条件「where」を明確に区別することが大事だと思います。
56
+
57
+ 基本的にjoin句は表示したいデータがある場合にしか使ってはいけません。
58
+
59
+ joinした結果menber_noが同一のものが複数返ってしまい、それを消すためにさらにgroupbyを重ねる
60
+
61
+ ということをしてしまうからです。上記の解釈で正しいとするとgroupbyは不要になります。