質問編集履歴

5

期待する結果の追加

2018/06/22 03:12

投稿

takagi.1994
takagi.1994

スコア47

test CHANGED
File without changes
test CHANGED
@@ -104,6 +104,8 @@
104
104
 
105
105
  (3, 'cccc');
106
106
 
107
+ (4, 'dddd');
108
+
107
109
 
108
110
 
109
111
  INSERT INTO `tableb` (`cd`, `id`, `data1`) VALUES
@@ -123,3 +125,65 @@
123
125
  (7, 3, 'hoge31');
124
126
 
125
127
  ```
128
+
129
+
130
+
131
+ 期待する結果1
132
+
133
+ ```
134
+
135
+ id customerName cd id1 data1
136
+
137
+ 1 aaaa 3 1 hoge13
138
+
139
+ 1 aaaa 2 1 hoge12
140
+
141
+ 1 aaaa 1 1 hoge11
142
+
143
+ 2 bbbb 6 2 hoge23
144
+
145
+ 2 bbbb 5 2 hoge22
146
+
147
+ 2 bbbb 4 2 hoge21
148
+
149
+ 3 cccc 7 3 hoge31
150
+
151
+ 4 dddd null null null
152
+
153
+ ```
154
+
155
+
156
+
157
+ 期待する結果2
158
+
159
+ ```
160
+
161
+ id customerName cd id1 data1
162
+
163
+ 1 aaaa 3 1 hoge13
164
+
165
+ 2 bbbb 6 2 hoge23
166
+
167
+ 3 cccc 7 3 hoge31
168
+
169
+ 4 dddd null null null
170
+
171
+ ```
172
+
173
+
174
+
175
+ UI側で"最新のみ"のチェックボックスがあるのでそれにチェックがあるかないかによって
176
+
177
+ 期待する結果は1と2に分かれます。
178
+
179
+
180
+
181
+ また、プログラム側でwhere区をUI側で選択されたその他の条件で組み立てて行くつもりですが、
182
+
183
+ 今回はそこは問題になってはいません。
184
+
185
+
186
+
187
+ 最新flagがあるかないかで基本的なsql分は分けたくないなと思っています。
188
+
189
+ where区を組み立てるロジックをできればそれぞれに書きたくない。

4

文法の訂正

2018/06/22 03:12

投稿

takagi.1994
takagi.1994

スコア47

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  GROUP BY `tableA`.`id`
32
32
 
33
- ORDER BY `tableB`.`cd` DESC, `tableA`.`id` ASC
33
+ ORDER BY `tableA`.`id` ASC, `tableB`.`cd` DESC
34
34
 
35
35
  ```
36
36
 

3

説明の追記

2018/06/21 17:23

投稿

takagi.1994
takagi.1994

スコア47

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,16 @@
5
5
  `tableB`.`cd`の降順, `tableA`.`id`の昇順で取得したい。
6
6
 
7
7
  また、条件によって`tableB`.`cd`で降順した`tableB`最初の1件の場合と全件が必要です。
8
+
9
+
10
+
11
+ tableAはマスターでtableBにデータがあるデータが蓄積されcdの値が増えていきます。
12
+
13
+ よって、値が大きいものが最新となります。
14
+
15
+ 取得する際はtableaに対してソートをしてもその際のtableBのデータは最新順(つまり降順)とさせたい。
16
+
17
+ また、条件(最新の1件のみのflagがあるない)によってtableBから取得するデータを1件or全件としたい。
8
18
 
9
19
 
10
20
 

2

参考データの追加

2018/06/21 16:39

投稿

takagi.1994
takagi.1994

スコア47

test CHANGED
File without changes
test CHANGED
@@ -55,3 +55,61 @@
55
55
 
56
56
 
57
57
  うまく行く方法はありますでしょうか?
58
+
59
+
60
+
61
+ ```
62
+
63
+ CREATE TABLE `tablea` (
64
+
65
+ `id` int(11) NOT NULL AUTO_INCREMENT,
66
+
67
+ `customerName` varchar(60) NOT NULL,
68
+
69
+ PRIMARY KEY (`id`)
70
+
71
+ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
72
+
73
+
74
+
75
+ CREATE TABLE `tableb` (
76
+
77
+ `cd` int(11) NOT NULL AUTO_INCREMENT,
78
+
79
+ `id` int(11) NOT NULL,
80
+
81
+ `data1` varchar(255) NOT NULL,
82
+
83
+ PRIMARY KEY (`cd`)
84
+
85
+ ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
86
+
87
+
88
+
89
+ INSERT INTO `tablea` (`id`, `customerName`) VALUES
90
+
91
+ (1, 'aaaa'),
92
+
93
+ (2, 'bbbb'),
94
+
95
+ (3, 'cccc');
96
+
97
+
98
+
99
+ INSERT INTO `tableb` (`cd`, `id`, `data1`) VALUES
100
+
101
+ (1, 1, 'hoge11'),
102
+
103
+ (2, 1, 'hoge12'),
104
+
105
+ (3, 1, 'hoge13'),
106
+
107
+ (4, 2, 'hoge21'),
108
+
109
+ (5, 2, 'hoge22'),
110
+
111
+ (6, 2, 'hoge22'),
112
+
113
+ (7, 3, 'hoge31');
114
+
115
+ ```

1

誤字

2018/06/21 16:26

投稿

takagi.1994
takagi.1994

スコア47

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  GROUP BY `tableA`.`id`
22
22
 
23
- ORDER BY `tableB`.`cd` DESC
23
+ ORDER BY `tableB`.`cd` DESC, `tableA`.`id` ASC
24
24
 
25
25
  ```
26
26
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  GROUP BY `tableC`.`id`
48
48
 
49
- ORDER BY `tableC`.`cd` DESC
49
+ ORDER BY `tableC`.`cd` ASC
50
50
 
51
51
  ```
52
52