ralphi: große DB Tabelle ergänzen (Machbarkeit)

Hallo Leute,

ich möchte gerne eine Tabelle, einer ‘dicken’ DB bei Strato ergänzen.
Die DB (iploc) besteht aus 2 Tabellen. Wo in einer (Tabelle1) die IP-Adressbereiche stehen und in der Anderen die dazugehörige Länderkennung.

Ich benötige die Länderkennung für ein regionales Bestellsystem (zur Abholung), um Bots aus USA & Co fernzuhalten.

Jetzt möchte ich die Länderkennung mit in die Tabelle1 aufnehmen, um die Abfrage zu beschleunigen.

Mein Problem:
Mit SSH, benötige ich für ca. 500 Datensätze gut 15 min und wird dann gestoppt. D.h. ich müsste die Ausführung des Progs alle 15 min manuell neu anstoßen.
Bei 567.382 Datensätzen, hieße das 1.135 mal ausführen – geht gar nicht :-|

Jetzt hab ich versucht, den Prozess mit file_get_contents() , cron anzustoßen – macht er nicht :-(

Auf $data = file_get_contents("http://ipinfo.io/".$ip."/json");
Kann ich nicht zugreifen, weil die ausgehende IP der Stratoserver anscheinend von mehreren genutzt wird –> Limit erreicht.

Hat irgendjemand eine Idee?

Das Prog:

<?php  
error_reporting(E_ALL);  
include "config.php";  
echo date ("H:i:s")."\n";  
  
$startzeit = time();  
  
	$sql = "SELECT * FROM city2014 WHERE status = 0 ORDER BY locId ;";  
		$res = mysql_query( $sql);  
		$anz = mysql_num_rows($res);  
	$i=0;  
	while($row = mysql_fetch_array($res)) {  
		echo $i ." - ";  
  
			$sql = "SELECT * FROM block2014  WHERE locId = " . $row['locId'] . "  ;";  
			$res2 = mysql_query( $sql);  
			$anz = mysql_num_rows($res2);  
			$row2 = mysql_fetch_array($res2);  
				if ( strlen ($row2['country']) < 2 ) {  
  
					$sql = "UPDATE block2014 SET country = '" . $row['country'] . "' , city = '" . $row['city'] . "' WHERE locId = " . $row['locId'] . " ;";  
  
					mysql_query( $sql);  
					echo $sql . '<br>\n';  
				  
				}else{  
					echo $row['locId'] . ' schon vorhanden\n';  
				} // prüfen  
	  
	  
		$sql = "UPDATE city2014 SET status = 1 WHERE locId = " . $row['locId'] . " ;"; // als erledigt markieren  
		mysql_query( $sql);  
		$i++;  
		// wie lange brauch ich  
		$vergangen = (time() - $startzeit);  
		echo "xxx--".date ("H:i:s", $vergangen)."--xx--".$vergangen."--xxx";  
		  
  } // alle durch (schön wärs)  
  
echo "ende\n";  
exit;  
	  
?>

Viele Grüße aus LA

--
ralphi
  1. Hallo,

    Mein Problem / dicke Tabelle
    Bei 567.382 Datensätzen, hieße das 1.135 mal ausführen – geht gar nicht :-|

    soweit ich informiert bin, ist das nicht wirklich eine große Tabelle.

    Hat irgendjemand eine Idee?

    Das Prog:

    [...]

    scheint eine Aufgabe wahrnehmen zu sollen, die bestimmt von der DB effizienter erledigt wird.
    Leider hab ich schon zu lange nichts mehr mit DBs zu tun gehabt, aber da geht bestimmt was...

    Gruß
    Kalk

    1. Hi,

      scheint eine Aufgabe wahrnehmen zu sollen, die bestimmt von der DB effizienter erledigt wird.
      Leider hab ich schon zu lange nichts mehr mit DBs zu tun gehabt, aber da geht bestimmt was...

      daran hab ich gar nicht mehr gedacht. Klar müsste das mit SQL gehen :-)
      Ich google mich mal durch.

      Viele Grüße aus LA

      --
      ralphi
      1. manchmal sieht man den Wald..

        UPDATE block2014 SET block2014.country =  
        (SELECT city2014.country FROM city2014  
        WHERE city2014.locId = block2014.locId)
        

        1285323 Datensätze betroffen. (Die Abfrage dauerte 40.6858 Sekunden)

        War ne doofe Frage von mir -> kann gelöscht werden. ;-) Bin halt doch noch Anfänger.

        Viele Grüße aus LA

        --
        ralphi
        1. Hallo,

          War ne doofe Frage von mir

          sowas gibt's nicht.

          kann gelöscht werden.

          nö, da machstu jetzt einen Hilfreichstern an meine erste Antwort und dann wird irgendwann archiviert.

          Bin halt doch noch Anfänger.

          Das wird sich in deinem Fall ja zwar mal ändern, aber die Anfänger ansich wachsen ja nach.

          Gruß
          Kalk