質問するログイン新規登録

回答編集履歴

4

追記

2015/11/16 18:54

投稿

退会済みユーザー
answer CHANGED
@@ -36,4 +36,40 @@
36
36
  , '太郎'
37
37
  , '%太郎%'
38
38
  )
39
- ```
39
+ ```
40
+
41
+ ---
42
+
43
+ ```SQL
44
+ CREATE TABLE `test` (
45
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
46
+ `family_name` varchar(16) DEFAULT NULL,
47
+ `first_name` varchar(16) DEFAULT NULL,
48
+ PRIMARY KEY (`id`)
49
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
50
+
51
+ INSERT INTO `test` (`id`, `family_name`, `first_name`)
52
+ VALUES
53
+ (1,'山本','太郎'),
54
+ (2,'麻生','太郎'),
55
+ (3,'橋本','龍太郎'),
56
+ (4,'河野','太郎'),
57
+ (5,'石原','慎太郎'),
58
+ (6,'石破','茂'),
59
+ (7,'小泉','進次郎');
60
+ ```
61
+
62
+ このようなテーブルとデータがあるとき、以下のようなSQLで、並べ替えをしてあげる方が便利かと。
63
+
64
+ ```SQL
65
+ SELECT
66
+ id
67
+ , family_name
68
+ , first_name
69
+ , IF(first_name = '太郎', 1, 2) AS matchLevel
70
+ FROM test
71
+ WHERE first_name LIKE '%太郎%'
72
+ ORDER BY matchLevel
73
+ ```
74
+
75
+ ![イメージ説明](84bed8a5e5889adba2a156c9d11a880f.png)

3

追記

2015/11/16 18:54

投稿

退会済みユーザー
answer CHANGED
@@ -14,7 +14,7 @@
14
14
  )
15
15
  ```
16
16
 
17
- でも、システムとしては使いにくそう…こんな例で。
17
+ でも、システムとしては使いにくそう…こんな例で。「部分検索のつもり」で検索しているユーザーにとっては「不可解な」動きでしかないように思います。
18
18
 
19
19
  ```
20
20
  |氏    |名    |

2

追記

2015/11/16 17:06

投稿

退会済みユーザー
answer CHANGED
@@ -14,8 +14,26 @@
14
14
  )
15
15
  ```
16
16
 
17
- でも、システムとしては使いにくそう…
17
+ でも、システムとしては使いにくそう…こんな例で。
18
18
 
19
19
  ```
20
- |氏|名|
20
+ |氏    |名    |
21
+ ======================
22
+ |麻生   |太郎   |
23
+ ----------------------
24
+ |橋本   |龍太郎  |
25
+ ```
26
+
27
+ ```SQL
28
+ SELECT *
29
+ FROM person
30
+ WHERE 名 LIKE IF(
31
+ EXISTS (
32
+ SELECT *
33
+ FROM person
34
+ WHERE 名 LIKE '太郎'
35
+ )
36
+ , '太郎'
37
+ , '%太郎%'
38
+ )
21
39
  ```

1

修正

2015/11/16 17:01

投稿

退会済みユーザー
answer CHANGED
@@ -12,4 +12,10 @@
12
12
  , '札幌市東'
13
13
  , '%札幌市東%'
14
14
  )
15
+ ```
16
+
17
+ でも、システムとしては使いにくそう…
18
+
19
+ ```
20
+ |氏|名|
15
21
  ```