2016-09-21 129 views
0

這裏是想我做什麼來:MySQL的通配符匹配子字符串兩個領域

我有了幾個領域一個MySQL數據庫 - 我指的是字段是一個名爲url_links

contact_emailsite_url

我在找的是一個簡單的'更新'查詢,如果有匹配,它將設置一個二進制標誌。

在僞代碼

更新url_links SET domainMatch = 1其中,{後@ CONTACT_EMAIL 的子串} = SITE_URL的{子 - 可能是http:// HTTPS:// https://www或任何網址 - 即只是域名}

因此,如果郵件是像[email protected]和域http://www.mywebsiteisgreat.com它不會匹配

,但如果電子郵件是[email protected]它將設置domainMatch字段爲1 - 域匹配。

謝謝!

+0

謝謝馬丁對於提高我的問題。雖然我們正在討論這個問題 - 這裏解釋爲什麼解決方案有效的最佳做法是什麼。我仍然試圖圍繞你可以用MySQL做的驚人的事情。我可以在PHP中使用循環來完成這些相同的事情,但是它更加直接在MYSQL中執行。如果我們可能還列出了對功能和鏈接的引用,以幫助讀者理解事情是如何發生的,我們都會學到更多。再次感謝。 – Viktor

回答

1

嘗試此查詢:

UPDATE url_links 
SET domainMatch = 1 
WHERE SUBSTRING_INDEX(contact_email,'@', -1) 
LIKE CONCAT('%', SUBSTRING_INDEX(site_url,'.', -2), '%'); 

(我更新了這個與數據庫中的實際字段名,所以我們可以測試它更容易)

+0

這不起作用,它沒有在數據庫中找到正確的電子郵件。這是因爲數據庫主要包含帶有'http://'和'https://'的URLS - 它只能找到那些不好的記錄,即缺少http://,所以更新的腳本需要去掉http:/// https://和http:// www。和https:// www或任何其他組合可能是http:// m。 也許這樣做的方法是僅僅在URL字段中查找第一個點(。)之後的子字符串,它將覆蓋大多數URLS – Viktor

+1

我剛剛對此有所瞭解。看看SUBSTRING_INDEX()是否有訣竅 –

+0

感謝您保持它 - 這並沒有做太多 - 它仍然只是「找到」缺少http://的記錄 - 即數據庫中的錯誤。 :)我傾向於可能做2個查詢 - a)將域名提取到它自己的字段中的查詢讓我們稱之爲'域',然後b)只要域名本身被隔離,您的查詢就可以很好地工作。你怎麼看?是否有可能做1查詢? – Viktor