Modifica di un campo in funzione di un valore estratto, moltiplicando altri valori

Monital

Utente Attivo
15 Apr 2009
778
2
18
Buonasera,

ormai frequento da un pò questo forum dove ho tratto parecchia ispirazione e sopratutto sono stato aiutato tantissimo per migliorare questa piccola passione nonostante non sia un programmatore.

Purtroppo,per voi ;) , devo attingere ancora al vostro sapere ma confido nel vostro buon cuore ed evitarmi un ricovero in psichiatria, dato che ancora una volta mi trovo su un problem ache mi sta facendo diventar matto.

Spiego il problema

Ho la solita tabella con circa 20.000 righe. ora io dovrei estrarrei dati contententi in un campo chiamato 'posizione' ed in base a questo modificare un altro campo chiamato 'valore' moltiplicando 3/4 campi

ad esempio se estrae 0 dal campo posizione deve moltiplicarmi il campo 2 il 3 ed il 4 ed inserire il risultato nel campo 'valore' etc.

questo lo deve fare per tutte le righe in maniera autonoma ed in funziona da cosa estrae dal campo 'posizione.

avevo usato uno script simile ma non riescoa farlo fungere mi và in loop lo script.

PHP:
$sqlquery = "SELECT * FROM tabella ORDER by ID";
$dati=array();
$result = mysql_query($sqlquery);
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)){
$dati[]= $linea['ID'];
}

foreach($dati as $key => $id) 
{ 
$value1 = $dati[$key]; 


$sql = "UPDATE tabella SET campox = '{$value1}' WHERE ID = '{$id}'"; 
mysql_query($sql) or die(mysql_error()); 
}

però modificando i campi in base alle mie esigenze facendo una prova su una riga non mi modifica niente anzi mi va in loop.

Peraltro nona vrei idea di come far moltiplicare i campi in funzione di cosa estrae.

Suggerimenti?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
scusa ma forse non ti sei spiegato bene
hai una tabella del tipo
id posizione campo_1 campo_2 campo_3 campo_4 campox

in posizione hai i valori da zero a ??
se posizione == 0 cosa moltiplichi cioè quali campi tra loro?
e se posizione es. ==1 ecc..? cosa fai?

tirando un po' ad indovinare
se posizione ==0 fai campo_1 * campo_2 * campo_3 * campo_4
se posizione ==1 fai campo_2 * campo_3 * campo_4
se posizione ==2 fai campo_3 * campo_4
se posizione ==3 fai campo_4
e per quell'id uppi campox

sappimi dire se è così?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
scusa ma forse non ti sei spiegato bene
hai una tabella del tipo
id posizione campo_1 campo_2 campo_3 campo_4 campox

in posizione hai i valori da zero a ??
se posizione == 0 cosa moltiplichi cioè quali campi tra loro?
e se posizione es. ==1 ecc..? cosa fai?

tirando un po' ad indovinare
se posizione ==0 fai campo_1 * campo_2 * campo_3 * campo_4
se posizione ==1 fai campo_2 * campo_3 * campo_4
se posizione ==2 fai campo_3 * campo_4
se posizione ==3 fai campo_4
e per quell'id uppi campox

sappimi dire se è così?

centro

solo che io vorrei farlo fare in automatico a tutti gli id senza che debba selezionarlo uno.

questo che in amniera che se mi si aggiorna la tabella mi basta far aprtire lo script e il campox mi si aggiorna in funzione degli altri campi.

ovviamente i campi da moltiplicare possono essere vari ma sempre nella stessa tabella
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
ti faccio un esempio con la tabella che avevo postato
PHP:
<?php
$q=mysql_query("SELECT * FROM tabella ORDER BY id");
while($riga=mysql_fetch_array($q)){
	switch(){
		case 0:$r=$riga['campo_1']*$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
		break;
		case 1:$r=$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
		break;
		case 2:$r=$riga['campo_3']*$riga['campo_4'];
		break;
		case 3:$r=$riga['campo_4'];
		break;
	}
	$up=mysql_query("UPDATE tabella SET campox=$r WHERE id=".$riga['id']);
}
?>
se lo lanci ti fa tutto in una volta, considera però che se hai 20.000 record ti conviene aumentare il tempo di vita dello script altrimenti corri il rischio che si blocchi
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
ti faccio un esempio con la tabella che avevo postato
PHP:
<?php
$q=mysql_query("SELECT * FROM tabella ORDER BY id");
while($riga=mysql_fetch_array($q)){
	switch(){
		case 0:$r=$riga['campo_1']*$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
		break;
		case 1:$r=$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
		break;
		case 2:$r=$riga['campo_3']*$riga['campo_4'];
		break;
		case 3:$r=$riga['campo_4'];
		break;
	}
	$up=mysql_query("UPDATE tabella SET campox=$r WHERE id=".$riga['id']);
}
?>
se lo lanci ti fa tutto in una volta, considera però che se hai 20.000 record ti conviene aumentare il tempo di vita dello script altrimenti corri il rischio che si blocchi

grazie borgo sempre gentilissimo, però ho tre domandine ancora

1) puoi spiegarmi questa cosa di "aumentare il tempo di vita"?

2)dato che hai moltiplicato direttamente le righe mi prendi impreparato, quindis e dovessia ggiungere delle variabili del tipo (seguendo il tuo esempio)
if posizione==2
(campo1*2+campo2*0.03+campo4)?

3)se volessi definire più posizioni? del tipo

if posiione==1 || posizione==3 ?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
1)
il tempo di vita di uno script è il tempo massimo che uno script ha per essere eseguito.
il tempo di default è 30 sec (determinato in php.ini), cioè se lo script deve compiere moltissime elaborazioni e il tempo supera i 30 sec lo script si arresta.
nel tuo caso lo script deve fare un ciclo su 20.000 record
quindi deve estrarre il record, vedere cosa hai scelto, fare le moltiplicazioni, uppare il record
se per ipotesi per fare questo ci metta 0.01 sec, a fare 20.000 cicli ci mette 200 sec > di 30 sec, quindi lo script si arresta
quindi all'inizio dello script metti
PHP:
<?php
 set_time_limit(250);//o altro valore in secondi
 //...........

allungando così il suo tempo di vita
vedi: http://it2.php.net/manual/en/function.set-time-limit.php
2)
questo mi sembra semplice (se non ho capito male)
PHP:
switch(){
        //...
        break;
        case 2:$r=($riga['campo_1']*2+$riga['campo_2']*0.03+$riga['campo_4']);
        break;
       //.....
    }

!! guarda che nello switch mi era rimasto nella penna (tastiera)
PHP:
//...
switch($riga['posizione']){
        case 0:$r=......
//...

3)
non puoi più usare lo switch ma ricorrerre a if elseif (con o senza else)
PHP:
//...
if($riga['posizione']==0){
	//.....
}elseif($riga['posizione']==1 || $riga['posizione']==2){
	//......
}elseif($riga['posizione']==2){
//...
}
//....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
intendevo perchè non si può usare in quasta maniera:

switch(){
case 0:$r=$riga['campo_1']*$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
break;
case 1 OR 2:$r=$riga['campo_2']*$riga['campo_3']*$riga['campo_4'];
break;
case 3:$r=$riga['campo_4'];
break;
}
o almeno secondo me non consigliabile
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Sì, invece. Si può usare esattamente come ti ho fatto vedere. Esempio:
PHP:
<?php
function switchTest($val)
{
    switch ($val) {
        case 'foo':
        {
            return 'foo';
            break;
        }

        case 'bar': case 'baz':
        {
            return 'bar or baz';
            break;
        }

        default:
        {
            return '?';
        }
    }
}

var_dump(switchTest('foo'));
var_dump(switchTest('bar'));
var_dump(switchTest('baz'));
var_dump(switchTest('boh'));
Visualizza:
Codice:
string(3) "foo"
string(10) "bar or baz"
string(10) "bar or baz"
string(1) "?"
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
grazie ragazzi.

allora mi ero accorto che mancava r['posizione'] nello switch, comunque nel mentre che aspettavo si è svegliata la mia vena creativa ed ho risolto con un if elseif, per quanto riguarda il tempo di vita dello script è abbastanza veloce ad uppare uqindi penso vada bene com'è

due cose

A) come mi ha ionsegnato unc erto alessandro l'up non andava perchè $r andava tra le parentesi graffe

quindi

PHP:
$up=mysql_query("UPDATE tabella SET campox=$r WHERE id=".$riga['id']);

non funge mentre
PHP:
$up=mysql_query("UPDATE tabella SET campox='{$r}' WHERE id=".$riga['id']);

va perfettamente.

B) vorrei capire la differenza del case con l'if, difatti sono riuscito a farlo con l'if tranqueillamente, forse si riaprmia del codice?

Grazie come sempre dell'aiuto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
dipende da come hai setteto campox:
se campox è un intero e così il risultato della moltiplicazione, va bene anche senza apici, comunque le graffe non servirebbero (anche se alxex le ama molto)

PHP:
$up=mysql_query("UPDATE tabella SET campox='$r' WHERE id=".$riga['id']);

l'istruzione switch è come usare vari if/elseif/else, per quanto riguarda il risparmio di codice dipende.
ti conviene guardare
http://it.php.net/manual/en/control-structures.switch.php
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
dipende da come hai setteto campox:
se campox è un intero e così il risultato della moltiplicazione, va bene anche senza apici, comunque le graffe non servirebbero (anche se alxex le ama molto)

PHP:
$up=mysql_query("UPDATE tabella SET campox='$r' WHERE id=".$riga['id']);

l'istruzione switch è come usare vari if/elseif/else, per quanto riguarda il risparmio di codice dipende.
ti conviene guardare
http://it.php.net/manual/en/control-structures.switch.php

però senza graffe non mi uppava il campox che è settato Varchar

p.s ti chiederai del eprchè del Varchar,perchè il risultato delle moltiplicazioni mi servono epr impostare dei range, in realtà sul campo x non va un numero ma delle parole.

grazie della guida molto utile

p.s.2 vedendo che non me le uppava ho rpeferito provare le graffe prima di scrivere,sennò ale mi bacchettava ;)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
inoltre lo switch sembrerebbe più veloce

PHP:
<?php
$a=3;
//con if elseif else
$inizio_if=microtime(TRUE);
if($a==1){
	echo "uno";
}elseif($a==2){
	echo "due";
}elseif($a>=3 && $a <=5){//oppure elseif($a==3 || $a==4 || $a==5)
	echo "non se se tre o quattro o cinque";
}elseif($a==6){
	echo "sei";
}else{
	echo "caso non previsto";
}
$durata_if=microtime(TRUE)-$inizio_if;
echo "<br>";
//con lo switch
$inizio_sw=microtime(TRUE);
switch($a){
	case 1: 
		echo "uno";break;
	case 2: 
		echo "due";break;
	case ($a>=3 && $a<=5): //oppure case ($a==3 || $a==4 || $a==5):
		echo "non se se tre o quattro o cinque";break;
	case 6: 
		echo "sei";break;
	default:
		echo "caso non previsto";break;
}
$durata_sw=microtime(TRUE)-$inizio_sw;
echo "<br><br>il costrutto if elseif impiega $durata_if sec<br>";
echo "il costrutto switch impiega $durata_sw sec<br><br>";
if($durata_sw > $durata_if){
	echo "lo switch è più lento degli if";
}elseif($durata_sw < $durata_if){
	echo "lo switch è più veloce degli if";
}else{
	echo "il tempo di esecuzione è uguale";
}
?>
questo è l'output
non se se tre o quattro o cinque
non se se tre o quattro o cinque

il costrutto if elseif impiega 6.91413879395E-5 sec
il costrutto switch impiega 1.00135803223E-5 sec

lo switch è più veloce degli if
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
WOW

tenendo presente che avevo già risolto con l'if dato che ho circa 30 valori da verificare mi son detto

e proviamolo sto switcho.

Funziona na roba esagerata senza contare che ci vuole molto meno a scrivere il codice ed ha aggiornato in un secondo

grande

ma si può usare anche per determinare maggiore minore?

del tipo se devo fare

if(x<5 && x<8) per includere i valori tra 5 e 8

si può usare los tesso lo switch?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
un altra domanda

PHP:
$up=mysql_query("UPDATE tabella SET campox='$r' WHERE id=".$riga['id']);

$r e l'insieme dei valori estratti valori diciamo che vanno da 0 a 100

io ora in realta tramite un if elseif in campox gli faccio inserire dei dati del tipo

PHP:
if($r>90 && $r<95){
$x="Bravo";
}elseif($r>80 && $r<90){
$x="Mediocre";
}

e successivamente

PHP:
$up=mysql_query("UPDATE tabella SET campox='{$x}' WHERE id=".$riga['id']);

e se invece volessi saltare il passaggio dell'if e quindi ordinare la tabella per il valore più alto in $r e poi ai primi 50 assegnare "Bravo" e dal 51 al 150 "Mediocre" e così via.....

Come posso farlo?

con il ciclo for riesco ad estrarre secondo questo criterio ma non ho idea di come usarlo epr poi upparne il risultato

idee?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
cosa intendi con
No, lo switch si può usare solamente per controllare se una stessa variabile è uguale ad un valore. Per istruzioni più complesse dovrai comunque usare if.
da manuale php
PHP:
case ($totaltime < 1):
		echo "That was fast!";
		break;

PHP:
case ($month=='Jan' || $month=='Feb' || $month=='Mar'): 
        $quarter = "Q1 2008"; 
        break;
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
un altra domanda

PHP:
$up=mysql_query("UPDATE tabella SET campox='$r' WHERE id=".$riga['id']);

$r e l'insieme dei valori estratti valori diciamo che vanno da 0 a 100

io ora in realta tramite un if elseif in campox gli faccio inserire dei dati del tipo

PHP:
if($r>90 && $r<95){
$x="Bravo";
}elseif($r>80 && $r<90){
$x="Mediocre";
}

e successivamente

PHP:
$up=mysql_query("UPDATE tabella SET campox='{$x}' WHERE id=".$riga['id']);

e se invece volessi saltare il passaggio dell'if e quindi ordinare la tabella per il valore più alto in $r e poi ai primi 50 assegnare "Bravo" e dal 51 al 150 "Mediocre" e così via.....

Come posso farlo?

con il ciclo for riesco ad estrarre secondo questo criterio ma non ho idea di come usarlo epr poi upparne il risultato

idee?

ho risolto estraendo i dati con LIMIT e poi assegno il dato al risultato della select e lo riuppo.
 
Discussioni simili
Autore Titolo Forum Risposte Data
J [WP] Chiarimenti modifica campo WordPress 0
L modifica campo non funziona PHP 7
F Query modifica contenuto campo MySQL 5
G modifica campo testo in url Classic ASP 8
M Modifica dello sfondo di un campo in una sottomaschera MS Access 0
RedWolf Conoscere modifica campo tabella mySQL Database 1
M individuare l'ora della modifica del valore nel campo MySQL 0
G Modifica campo mysql PHP 3
C modifica contenuto campo MySQL 1
M Modifica Campo Contatore Database 0
P Pagina modifica record che non funziona PHP 0
L Modifica file upload in ASP Classic ASP 2
P modifica colore A Hover link website . WordPress 2
P Modifica con PHP di un node in una sitemap xml PHP 0
C Software modifica sitoweb in tempo reale WordPress 12
G Modifica immagine di sfondo attraverso un bottone PHP 18
L modifica dati. PHP 1
G modifica corretta funzione da eregi() a preg_match() PHP 3
R Modifica codice per l'upload di più file PHP 0
G Modifica testo Photoshop 3
felino Excel: popolare una cella con la data di modifica della riga a cui appartiene Windows e Software 3
felino [Wordpress] Modifica main color del template WordPress 8
M [PHP] Modifica account PHP 3
S [OFFRO] Creazione di programmi per la modifica automatizzata di testi Offerte e Richieste di Lavoro e/o Collaborazione 0
S [OFFRO] Rimozione o aggiunta di Password ai file PDF e opzionalmente loro modifica Offerte e Richieste di Lavoro e/o Collaborazione 2
F [PHP] modifica del body email con checked PHP 8
G Modifica da sito statico HTML a dinamico in Wordpress SEO e Posizionamento 1
Cosina Modifica script textarea jQuery 0
M [PHP] Calcolare costi su modifica orari PHP 4
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
F modifica recensione google Discussioni Varie 2
C Photoshop CS 6 salvare una modifica Photoshop 0
L [PHP] Modifica in tabella ultimo id PHP 5
C Pagina fb notifica modifica post Social Media Marketing 1
Q Notice: Undefined index: codice in C:\xampp\htdocs\STAGE\calendario\modifica.php on line 10 PHP 8
C [Joomla] [HTML] Modifica codice per adattamento app Joomla 18
Daniele_Carrara [Javascript] Modifica input date Javascript 5
J modifica spooler di stampa per stampare in ordine di nome i files pdf Windows e Software 2
Emix [PHP] Ricerca e modifica su due tabelle PHP 26
M [PHP] Tabella datagrid con icona di modifica che cambia in base a parametro PHP 0
Andrea1981 [WordPress] [HTML] Help modifica credits nel footer.Tema Customizr. WordPress 5
K [Visual Basic] Stampa e modifica record non funziona più Visual Basic 0
K [ASP.Net] Problema stampa e modifica ms sql ASP.NET 0
K stampa e modifica tabella in php e ms sql PHP 2
Michaelweb93 [WordPress] [HTML] Modifica sezione - pagina sito web WordPress 1
A [PHP] [RISOLTO] Modifica record db da form PHP 11
T [PHP] piccola modifica a script (non mio...) PHP 8
P Cerco programmatore per modifica sito wordpress Offerte e Richieste di Lavoro e/o Collaborazione 4
Z Modifica ricorsiva file html HTML e CSS 3
Trapano [PHP] modifica simultanea di più campi nel db PHP 1

Discussioni simili