[英]Use regex search in mysql within a comma separated string with regex patterns?
mysql> SELECT '11624' REGEXP "^(116[0-9]{2}|11625)$";
+----------------------------------------+
| '11624' REGEXP "^(116[0-9]{2}|11625)$" |
+----------------------------------------+
| 1 |
+----------------------------------------+
1 row in set (0.00 sec)
請注意,我不得不改變你在保存語法shipping_zipcodes
-最重要的是: |
而不是,
。
如果您可以假設所有輸入值(例如11624
)都是5位數字,那么您可能無需錨定或括號就可以這樣做。 如果沒有,則可以使用CONCAT()
將它們附加到當前的內容上。
你也許能夠使用REPLACE()
轉,
變成|
:
mysql> SELECT '11624' REGEXP REPLACE("116[0-9]{2},11625", ',', '|');
+-------------------------------------------------------+
| '11624' REGEXP REPLACE("116[0-9]{2},11625", ',', '|') |
+-------------------------------------------------------+
| 1 |
+-------------------------------------------------------+
但是...如果您的列表很長,查詢將很慢。 這些都需要全表掃描。 如果速度太慢,則需要構建一個表,將各個郵政編碼映射到提供程序,並將其編入索引。
在這種情況下,最好使用FIND_IN_SET而不是REGEX:
SELECT * FROM providers WHERE FIND_IN_SET('11624', shipping_zipcodes) > 0;
我認為最好的答案是對表格進行規范化處理,以擺脫逗號分隔的列表。 然后,我可以使用此查詢來獲取我想要的結果:
SELECT
pr.*,
GROUP_CONCAT(psp.postcode ORDER BY psp.postcode ASC SEPARATOR ',') AS postcodes
FROM
providers pr
LEFT JOIN
providers_shipping_postcodes psp ON psp.provider_id = pr.id
WHERE
'11624' RLIKE psp.postcode
GROUP BY
pr.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.