mySQLデータベースに2つのテーブルがあります。
最初のテーブルは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
2番目のテーブルは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を書き込みます。それらが一致しない場合、IPアドレスの最初の3つの部分を比較して同じことを行う必要があり、3つの部分が一致しない場合、IPアドレスの2つの部分を比較して同じことをする必要があります。
次の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値で2回書き込みます。
このコードを編集して正常に機能させるためのヒントを教えてください。どんな助けでもいただければ幸いです!