[英]Implementing incremental search in mysql
我想在MySQL中實現增量搜索。 搜索將從左到右。
我在MySQL中有以下數據。
測試數據庫: http : //sqlfiddle.com/#!9 / d23e0 / 1
場景:
+-------+
| code |
+-------+
| 0412 |
| 05412 |
| 1412 |
| 20412 |
| 28412 |
| 30412 |
| 34120 |
| 34121 |
| 34122 |
| 37412 |
| 40412 |
| 412 |
| 41412 |
| 4412 |
| 47412 |
| 52412 |
我想檢索其中包含'4'的所有代碼。 代碼應按以下順序返回。 首先是所有代碼在第一個位置都有'4',然后在第二個位置有'4',依此類推。 輸出應該是:
+-------+
| code |
+-------+
| 40412 |
| 412 |
| 41412 |
| 4412 |
| 47412 |
| 0412 |
| 1412 |
| 34120 |
| 34121 |
| 34122 |
| 05412 |
| 20412 |
| 28412 |
| 30412 |
| 37412 |
| 52412 |
編輯:我修改了要求。
Mysql有SUBSTRING_INDEX,它根據給定的分隔符返回給定列的子字符串。 您可以使用此操作執行訂單操作。 對於您列出的兩種方案,您可以使用以下查詢,
SELECT code
FROM icd9_codes
WHERE code LIKE '%4%'
ORDER BY LENGTH(SUBSTRING_INDEX(code, '4', 1))
注意:這是原始問題的解決方案已被更改(因為沒有人正確地將其包括在內......包括我自己)。
原始要求:如果沒有這樣的代碼,則僅返回第一個位置為'4'的代碼,然后返回第二個位置為'4'的代碼,依此類推。
SQL小提琴: http ://sqlfiddle.com/#!9 / d23e0 / 24
SELECT t1.code, t1.digitGroup, t1.thePosition
FROM
(
SELECT code,
CASE WHEN CHAR_LENGTH(code) >= 1 AND SUBSTRING(code, 1, 1) = '4' THEN 1
WHEN CHAR_LENGTH(code) >= 2 AND SUBSTRING(code, 2, 1) = '4' THEN 2
WHEN CHAR_LENGTH(code) >= 3 AND SUBSTRING(code, 2, 1) = '4' THEN 3
WHEN CHAR_LENGTH(code) >= 4 AND SUBSTRING(code, 2, 1) = '4' THEN 4
WHEN CHAR_LENGTH(code) >= 5 AND SUBSTRING(code, 2, 1) = '4' THEN 5
ELSE 0
END AS digitGroup,
POSITION('4' IN code) AS thePosition
FROM icd9_codes
) t1
WHERE t1.digitGroup > 0 AND t1.digitGroup =
(
SELECT MIN(t2.theMin) FROM
(
SELECT CASE WHEN POSITION('4' IN code) = 0 THEN 5
ELSE POSITION('4' IN code)
END AS theMin
FROM icd9_codes
) t2
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.