Mysql aktualisiert alle Zeilen basierend auf Auswahl aus einer anderen Tabelle

8

Ich habe zwei Tabellen;

%Vor%

Ich kann den Ländercode mit der IP-Adresse aus der ersten Tabelle auswählen:

%Vor%

In logs.logs habe ich alle REMOTE_ADDR (IP Adresse) gesetzt, aber alle COUNTRY_CODE Einträge sind leer. Nun möchte ich COUNTRY_CODE mit Hilfe der ipinfo-Tabelle entsprechend auffüllen. Wie kann ich das tun?

Danke!

    
anon 27.01.2011, 13:36
quelle

2 Antworten

9

Versuchen Sie

%Vor%

Wenn es fehlschlägt zu sagen, dass die Spaltentypen übereinstimmen müssen, müssen Sie Ihre logs.logs-Tabelle so ändern, dass die Spalte REMOTE_ADDR vom selben Typ ist (varchar (20)) wie die Tabelle ip_cidr.

    
Dean Rather 27.01.2011, 16:25
quelle
8

Bei einer Aktualisierung mit einer Tabelle verwenden Sie update t1 set c1=x where y .

Bei einer Aktualisierung mit mehreren Tabellen verwenden Sie update t1, t2 set t1.c1=t2.c2 where t1.c3=t2.c4

Hier ist die relevante Dokumentation Ссылка

Was Sie suchen, ist etwas in der Art von (editted) update logs.logs as l, ipinfo.ip_group_country as c set l.COUNTRY_CODE=c.country_code where c.ip_start <= INET_ATON(l.REMOTE_ADDR) order by c.ip_start asc

Edit: Sie haben Recht, die Max () in der ursprünglichen Antwort, die ich zur Verfügung gestellt habe, konnte nicht funktionieren. Die obige Abfrage sollte, obwohl sie wahrscheinlich weniger effizient ist als etwas wie der Ansatz in der Antwort unten.

    
nicolaskruchten 27.01.2011 13:45
quelle

Tags und Links