質問編集履歴

6

微調整した

2022/04/12 02:18

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
File without changes
test CHANGED
@@ -30,17 +30,17 @@
30
30
  ```
31
31
  |id|title|category_id|
32
32
  |:--|:--:|--:|
33
- |1|品物A|1|
33
+ |1|シーフードカレー|1|
34
- |1|品物A|2|
34
+ |1|シーフードカレー|2|
35
- |1|品物A|3|
35
+ |1|シーフードカレー|3|
36
- |2|品物B|1|
36
+ |2|肉じゃが|1|
37
- |2|品物B|2|
37
+ |2|肉じゃが|2|
38
38
 
39
39
  やりたいことはitemsのidを重複しない取得をしたいです。
40
40
  |id|title|category_id|
41
41
  |:--|:--:|--:|
42
+ |1|シーフードカレー|1|
42
- |1|品物A|1|
43
+ |1|肉じゃが|1|
43
- |1|品物B|1|
44
44
 
45
45
  GROUP BYなどでグルーピングする方法も調べたら出てきたのですが、
46
46
  このほかにも複数のテーブルをJOINしたり取得するカラムも別テーブルの項目を取得したいためGROUP BYを使用するとエラーになりうまくいきませんでした。
@@ -80,17 +80,17 @@
80
80
 
81
81
  |id|title|category_id|
82
82
  |:--|:--:|--:|
83
- |2|品物B|1|
83
+ |2|肉じゃが|1|
84
- |2|品物B|2|
84
+ |2|肉じゃが|2|
85
- |1|品物A|1|
85
+ |1|シーフードカレー|1|
86
- |1|品物A|2|
86
+ |1|シーフードカレー|2|
87
87
 
88
88
  これを
89
89
 
90
90
  |id|title|category_id|
91
91
  |:--|:--:|--:|
92
- |1|品物A|1|
92
+ |1|肉じゃが|1|
93
- |2|品物B|1|
93
+ |2|シーフードカレー|1|
94
94
 
95
95
  このようにできて一覧表示用の重複のないデータにできないかと考えておりました。
96
96
  説明わかりづらく大変申し訳ありません。

5

微調整

2022/04/12 02:13

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
File without changes
test CHANGED
@@ -12,10 +12,10 @@
12
12
  |id|item_id|category_id|
13
13
  |:--|:--:|--:|
14
14
  |1|1|1|
15
- |1|1|2|
15
+ |2|1|2|
16
- |1|1|3|
16
+ |3|1|3|
17
- |1|2|1|
17
+ |4|2|1|
18
- |1|2|2|
18
+ |5|2|2|
19
19
 
20
20
  categoriesテーブル
21
21
  |id|category_name|
@@ -33,8 +33,8 @@
33
33
  |1|品物A|1|
34
34
  |1|品物A|2|
35
35
  |1|品物A|3|
36
- |1|品物B|1|
36
+ |2|品物B|1|
37
- |1|品物B|2|
37
+ |2|品物B|2|
38
38
 
39
39
  やりたいことはitemsのidを重複しない取得をしたいです。
40
40
  |id|title|category_id|
@@ -80,10 +80,10 @@
80
80
 
81
81
  |id|title|category_id|
82
82
  |:--|:--:|--:|
83
+ |2|品物B|1|
84
+ |2|品物B|2|
83
85
  |1|品物A|1|
84
86
  |1|品物A|2|
85
- |2|品物B|1|
86
- |2|品物B|2|
87
87
 
88
88
  これを
89
89
 

4

微調整

2022/04/12 02:06

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
File without changes
test CHANGED
@@ -77,16 +77,20 @@
77
77
  ```
78
78
  上記のようにSQL(当初考えた)が変化します。
79
79
  複数の条件にマッチした同様のアイテム情報がレコードに出てきてしまうので
80
+
80
81
  |id|title|category_id|
81
82
  |:--|:--:|--:|
82
83
  |1|品物A|1|
83
84
  |1|品物A|2|
84
85
  |2|品物B|1|
85
86
  |2|品物B|2|
87
+
86
88
  これを
89
+
87
90
  |id|title|category_id|
88
91
  |:--|:--:|--:|
89
92
  |1|品物A|1|
90
93
  |2|品物B|1|
94
+
91
95
  このようにできて一覧表示用の重複のないデータにできないかと考えておりました。
92
96
  説明わかりづらく大変申し訳ありません。

3

微調整

2022/04/12 01:38

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
File without changes
test CHANGED
@@ -4,8 +4,8 @@
4
4
  itemsテーブル
5
5
  |id|title|
6
6
  |:-|:--:|
7
- |1|品物A|
7
+ |1|シーフードカレー|
8
- |2|品物B|
8
+ |2|肉じゃが|
9
9
  |3|品物C|
10
10
 
11
11
  category_itemテーブル
@@ -20,15 +20,13 @@
20
20
  categoriesテーブル
21
21
  |id|category_name|
22
22
  |:-|:--:|
23
- |1|肉|
23
+ |1|肉|
24
- |2|魚|
25
- |3|野菜|
24
+ |2|野菜|
25
+ |3|魚介類|
26
26
 
27
27
  上記をJOINしてくると以下のような結果になるかと思います。
28
28
  ```sql
29
- SELECT i.id, i.title, ci.category_id FROM items AS i
29
+ SELECT i.id, i.title, ci.category_id FROM items AS i INNER JOIN category_item AS ci ON i.id = ci.item_id
30
- LEFT JOIN
31
- category_item AS ci ON i.id = ci.id;
32
30
  ```
33
31
  |id|title|category_id|
34
32
  |:--|:--:|--:|
@@ -55,4 +53,40 @@
55
53
  **補足**
56
54
  MySQL5.7になります。
57
55
  タイトルを調整いたしました。
56
+ SELECT文が間違えていたので修正しました。
57
+ カテゴリー名が分かりづらかったので修正しました
58
58
 
59
+ **補足2**
60
+ 通常であれば、絞り込み検索で検索されない限り
61
+ ```sql
62
+ SELECT i.id, i.title FROM items AS i ORDER BY i.id DESC;
63
+ ```
64
+ 上記のようなSELECT文で一覧を出力させますが、絞り込み検索でチェックボックスでカテゴリーを選択した際に、
65
+ ```sql
66
+ SELECT
67
+ i.id, i.title, ci.category_id
68
+ FROM
69
+ items AS i
70
+ INNER JOIN
71
+ category_item AS ci ON i.id = ci.item_id
72
+ WHERE
73
+ ci.category_id = 2
74
+ OR
75
+ ci.category_id = 1
76
+ ORDER BY i.id DESC
77
+ ```
78
+ 上記のようにSQL(当初考えた)が変化します。
79
+ 複数の条件にマッチした同様のアイテム情報がレコードに出てきてしまうので
80
+ |id|title|category_id|
81
+ |:--|:--:|--:|
82
+ |1|品物A|1|
83
+ |1|品物A|2|
84
+ |2|品物B|1|
85
+ |2|品物B|2|
86
+ これを
87
+ |id|title|category_id|
88
+ |:--|:--:|--:|
89
+ |1|品物A|1|
90
+ |2|品物B|1|
91
+ このようにできて一覧表示用の重複のないデータにできないかと考えておりました。
92
+ 説明わかりづらく大変申し訳ありません。

2

タイトルを調整しました

2022/04/11 22:55

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
@@ -1 +1 @@
1
- MySQLの「1対多」の絞り込みで、重複しないレコードを取得したい
1
+ MySQLの「対多」の絞り込みで、重複しないレコードを取得したい
test CHANGED
@@ -54,4 +54,5 @@
54
54
 
55
55
  **補足**
56
56
  MySQL5.7になります。
57
+ タイトルを調整いたしました。
57
58
 

1

バージョンを追加

2022/04/11 22:02

投稿

paranoaman1217
paranoaman1217

スコア24

test CHANGED
File without changes
test CHANGED
@@ -52,3 +52,6 @@
52
52
  良き方法ご存知でしたらご教授いただきたいです。
53
53
  よろしくお願いします。
54
54
 
55
+ **補足**
56
+ MySQL5.7になります。
57
+