Gateway Time-out come risolvo ?

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve ho la necessita di far effettuare ad uno script un enorme confronto di valori faccio un esempio

Tabella A

ID_A Nome

Tabella B
ID_B Nome2

Ora ho uno script del genere

$q=mysql_query("SELECT * FROM Tabella A")or die (mysql_error());
while($riga=mysql_fetch_array($q)){
$result=$riga['Nome'];
$id=$riga['ID_A'];
$up6=mysql_query("UPDATE Tabella B SET Nome='{$result}' WHERE ID_B='{$id}'");


}

Ma da sempre quell'avviso senza completarmi la query. Ho inserito nella prima riga dopo <? php il set limits a 3600 ma niente e non so come entrare nel php ini di aruba, non ho trovato neinte su google su dove e come modificare questo file.

La tabella B conta circa 206000 righe epr questo il confronto non riesce a farlo

Ho provato a mettere come clausola AND ID_B > 0 AND ID_B < 1000 e così perlomeno va fino a 2000 riesce ma arrivare fino a 200000 è un agonia.

Non c'è maniera di aggirare l'ostacolo e permettere con una sola istruzione di fare questo confronto e successivo update?

@edit

in sostanza lo script quando trova che i due id coincidono deve assegnare il nome.
 
Credo di aver avuto un idea al riguardo

allora mi spiego bene bene

Ho una tabella di circa 20.000 Record
così strutturata

ID | Nome
0 Antonio
1 Giovanni
2 Il pazzo
3 Da vinci
etc.

Mentre in un altra tabella ho la seguente struttura

ID | Nome | Cognome | Soprannome | idnome | idsoprannome | id cognome

1 _ _ _ 1 2 3

In principio i campi nome cognome e soprannome sono vuoti ho soltanto l'ID ed i 3 idnome id cognome ed id soprannome

Quindi in pratica l'ID 1 della seconda tabella dopo la mia query deve diventare

ID | Nome | Cognome | Soprannome | idnome | idsoprannome | id cognome

1 Giovanni Davinci Il pazzo 1 2 3

Quindi io conosco solo gli id del nome del soprannome e del cognome che attingono sempre dalla prima tabella

Le query le ho divise in 3 file per ridurre il lavoro, uno epr il nome uno epr il cognome ed uno per il soprannome
ad esempio questo è il codice che utilizzo per il cognome

PHP:
$q=mysql_query("SELECT * FROM tabella_A")or die (mysql_error());
while($riga=mysql_fetch_array($q)){
$result=$riga['Nome'];
$id=$riga['ID'];

$up7=mysql_query("UPDATE tabella_B SET Cognome='{$result}' WHERE idcognome='{$id}' ");

}

Allora credo di aver intuito che il grosso su cui si perde e fare i vari confronti con la tabella_A quindi ho pensato di farlo al contrario ma mi mancano le idee su come strutturare la query

Ora in pratica la query memorizza negli array sia l'ID che il Nome della tabella A e poi li confronta con l'idcognome della Tabella_B se invece volessi fare il contrario?

Far memorizzare l'idcognome della Tabella_B confrontarlo con l'ID della tabella_A prendere il Nome della Tabella_A e scriverlo nel campo Cognome della Tabella_B.

Dovrebbe impiegare molto meno tempo di quello che ci mette ora.

Mi sbaglio?
 
Ok non voglio dire che sono un genio ma sono un genio. :)

Non è velcoe quanto voelvo ma all'incirca ho dimezzato i tempi usando la join

PHP:
$sqlquery = "SELECT uno.* FROM tabella_A AS uno JOIN Tabella_B AS due WHERE uno.ID = due.idcognome ";
$result = mysql_query($sqlquery);

while ($riga = mysql_fetch_array($result, MYSQL_ASSOC)) {
$resulta=mysql_escape_string($riga['Nome']);
$id=$riga['ID'];

$up7=mysql_query("UPDATE Tabella_B SET Cognome='{$resulta}' WHERE idcognome='{$id}'");

}

In pratica invece di scorrere la Tabella_A per intero gli faccio prendere solo i nomi rispettivi all'id della Tabella_B

Per il momento mi basta però se qualcuno ha un idea per velocizzare ancora accetto voelntieri