我有mySQL數據庫中的2個表。MySQL的IP地址擺在ISP
第一個表是ISP:
isp_ip_address | isp_name
-------------------------
157.55.33.0 | isp_3
157.55.0.0 | isp_1
193.219.9.0 | isp_2
65.55.213.0 | isp_4
195.182.85.226 | isp_5
78.58.5.117 | isp_6
78.58.5.0 | isp_7
第二個表是user_stats:
uid | lastlogin_ip | lastlogin
------------------------------
111 | 78.58.83.111 | 2013-03-12
132 | 78.58.5.117 | 2013-03-12
258 | 195.182.85.226 | 2013-03-14
165 | 157.55.33.78 | 2013-03-12
822 | 65.55.213.216 | 2013-03-15
523 | 157.55.35.38 | 2013-03-12
.....
等。
我需要將用戶lastlogin_ip與isp_ip_address 進行比較,並在新表中插入uid,lastlogin_ip和isp_name。我需要像這樣比較ip_address:如果完全lastlogin_ip等於isp_ip_address,則停止搜索並寫入isp_name,如果它們不匹配,則需要比較firdt 3部分的IP地址並執行相同的操作,如果3個部分不匹配,我需要比較2部分的IP地址,並執行相同的操作。
我嘗試以下的SQL代碼:
SELECT
user_stats.`uid`,
user_stats.`lastlogin_ip`,
isp.`isp`,
FROM
stats.`user_stats`
LEFT JOIN stats.`isp`
ON(
IF(
isp.isp_ip_address LIKE user_stats.`lastlogin_ip`,
isp.isp_ip_address LIKE user_stats.`lastlogin_ip`,
IF(
SUBSTRING_INDEX(isp.isp_ip_address,'.',-1) LIKE SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',-1),
IF(
SUBSTRING_INDEX(SUBSTRING_INDEX(isp.isp_ip_address,'.',3),'.',-1) LIKE SUBSTRING_INDEX(SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',3),'.',-1),
IF(
SUBSTRING_INDEX(SUBSTRING_INDEX(isp.isp_ip_address,'.',2),'.',-1) LIKE SUBSTRING_INDEX(SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',2),'.',-1),
SUBSTRING_INDEX(isp.isp_ip_address,'.',1) LIKE SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',1),
NULL),
SUBSTRING_INDEX(isp.isp_ip_address,'.',2) LIKE SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',2)),
SUBSTRING_INDEX(isp.isp_ip_address,'.',3) LIKE SUBSTRING_INDEX(user_stats.`lastlogin_ip`,'.',3))));
此代碼進行比較的IP地址的部分,但它重複行,這意味着如果發現3個等份和2個等份,將其寫入同一行中的兩個次數與不同的isp_name值。
你能否給我一個提示,我應該如何編輯這段代碼來正常工作? 任何幫助,將不勝感激!
我編輯你的查詢(有一些語法錯誤),但這個查詢只給isp_name行的ip_addresses是相等於全部4個部分。 3部分,2部分和其他行是NULL – aurimokas 2013-03-26 08:21:59
這看起來就是你所要求的:「相等於全部4部分,3部分,2部分」。什麼不見了? – koriander 2013-03-26 09:48:26
我找不到有什麼問題。但是當我運行這個查詢時,它只顯示了isp_names,其中ip_adress和lastlogin的所有4個部分相等。當3或2個部分相等時,查詢不會寫入isp_name,而是寫入NULL值,而不是 – aurimokas 2013-03-26 11:58:22