2012-03-19 18 views
2

内の文字列に参加、私は4つのフィールドを持つテーブル 'のip_address' を持つ:
- id_ip
は -
をCLIENT_ID - CLIENT_IP
- MAC_ADDRESS分割し、私は問題を抱えているMySQLの

私は名前の新しいフィールドを追加しました'router'と私はそれを埋める必要があります、私は800行を手動で非常に難しいでしょう、phpMyAdminからonelinerのいくつかの種類で行うことは可能ですか?

'ルータ' はX.Y.Zフィールド 'CLIENT_IP'

サンプル列から最初のオクテットである場合、一般x.y.z.1ある:
1。 8001; 10.3.8.2; 00:00:00:00:00:AA; 10.3.8。

+0

あなたはmysqlやPHPスクリプトを実行するだけですか? – hjpotter92

+0

@ hjpotter92私はphpMyAdminを持っています。私がPythonで入手した場合、私は任意のPythonスクリプトを実行できます。 –

答えて

4
update ip_address 
set router = concat(substring_index(client_ip,'.',3), '.1'); 

あなたが最初の3つのオクテットを取得するために、ここでのMySQLのSUBSTRING_INDEX機能を使用することができますhttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index

+0

これは、私のIPアドレスが3オクテットだけになることを理解していますが、最後に.1を追加する方法は? –

+2

これは有用な関数 'substring_index'ですが、私はあなたが' update'ステートメントを見ていると思いますし、最後に '.1'をコネクションする必要があります。 'update ip_address ルータ= concat(substring_index(client_ip、 '。'、3)、 '.1')を設定します。 'http://sqlize.com/uRWZ9477B8 – mellamokb

+0

を参照してください。基本的には、これをPythonループで実行して800行すべてを更新することができます。または、mysqlの観点から使用するオートメーションはありますか? –

0

を参照してください。このクエリは、あなたのclient_ipフィールドの最初の3オクテットを '。'で区切られていると仮定して指定した通りに使用しようとすることで、新しいルータフィールドを設定します。文字。あなたがこれを実行する前に、IPv6を検討する必要がありますが、すべてがIPv4であると仮定すると、ここに行く:

あなたはこれが何をしたいあなたを取得していることを確認する必要があります「」 SELECT CLIENT_IP、SUBSTRING_INDEX(CLIENT_IPを、3 )ip_address

FROMこれは、ルータのフィールド UPDATEのIP_ADDRESSのSETルータ= SUBSTRING_INDEX(CLIENT_IPを更新する、3)

編集」。 ':私は' あなたのコメントから明らかに遅すぎる:)よ、単純に連結UPDATE ip_address SET router = CONCAT(SUBSTRING_INDEX(client_ip、 '。'、3)、 '.1')

関連する問題