簡體   English   中英

MySQL:需要從地址表中選擇唯一的街道名稱列表

[英]MySQL: Need to select a list of unique street names from a table of addresses

我有一個表格,其中除其他外,其中包含一個字段,用於指定某些地方的街道地址。 我試圖找出一種方法,當它們與給定的搜索詞匹配時,從該表中返回街道名稱的一部分。

到目前為止,我有這個:

SELECT `street` FROM `addresses` 
WHERE (`street` LIKE '%searchTerm%')
GROUP BY `street` 
ORDER BY LOCATE('searchTerm',`street`) 
LIMIT 10;

這樣做沒關系,當然,除了它具有返回整個街道地址(包括房屋號)的不良影響之外,這里我只想要街道名稱。 但是,我不知該如何刪除任何前導數字,破折號或#號,並僅從查詢中收集街​​道名稱?

有沒有辦法做到這一點? 還是在獲取數據后只在代碼(PHP)中管理結果?

謝謝!

以我的理解,您只需要通過查找模式'%searchTerm%'的最近空格來分隔整個街道名稱。 這在MySQL中是可行的,但是我建議在代碼中進行。 如果確實需要在數據庫級別使用它,則可以將其放入函數中

這是在MySQL中有效的代碼。 (可以在進行一些修改后在查詢中使用它-但是我不建議這樣做:))

SET @STREET='tree';
SET @HAYSTACK='Some man lives at some street 15 in some town in some country';
SET @STREET_START=locate(@STREET, @HAYSTACK) ;
-- first space
SET @FULL_STREET_START=@STREET_START - (SELECT locate(' ', 
reverse(substring(@HAYSTACK,1, @STREET_START )))) + 1;
-- last space
SET @FULL_STREET_END=LENGTH(@STREET) + locate(' ', 
substring(@HAYSTACK,@STREET_START+LENGTH(@STREET))) + 1;
SELECT substring(@HAYSTACK, @FULL_STREET_START, @FULL_STREET_END);
-- result
+------------------------------------------------------------+
| substring(@HAYSTACK, @FULL_STREET_START, @FULL_STREET_END) |
+------------------------------------------------------------+
|  street                                                    |
+------------------------------------------------------------+

好吧,因此,在聽完上面的評論/建議並給出了我的特定用例的詳細信息之后(我通常可以假定字符串中第一個空格之前的所有內容都是可處理的信息),我最終得到了以下查詢,實際上效果很好:

SELECT
    SUBSTRING(`street`,LOCATE(' ',`street`)+1,LENGTH(`street`)) AS `streetSearch`
FROM `addresses`
WHERE `street` LIKE ('%searchTerm%')
GROUP BY SUBSTRING(`street`,LOCATE(' ',`street`)+1,LENGTH(`street`))
ORDER BY LOCATE('searchTerm',`street`)
LIMIT 10;

盡管我意識到有很多事情是理所當然的,但鑒於我正在處理的表中的數據,該解決方案的工作時間> 99%(即在解決方案中未產生任何假陽性/陰性)到目前為止的測試)。

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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