簡體   English   中英

在mysql中實現增量搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM