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

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio
ho risolto estraendo i dati con LIMIT e poi assegno il dato al risultato della select e lo riuppo.

ho un problema alquanto strano

in pratica faccio questa query

PHP:
	$q2=mysql_query("SELECT * FROM tabella  ORDER BY actor DESC LIMIT 201,500");
while($riga2=mysql_fetch_array($q2)){

$result2=$riga2['actor'];
 $up2=mysql_query("UPDATE tabella SET campo=Bravo' WHERE actor IN($result2)");

}

però di aggiornare aggiorna quasi correttamente il databse però mi da un errore 500

Si è verificato un errore.

Se il problema persiste, probabilmente il programma che hai tentato di eseguire non funziona correttamente, o perché qualcuno ci sta lavorando, o perché si tratta di un malfunzionamento dovuto a qualche bug di programmazione, in questo caso informaci.

cosa c'è di sbagliato?


in questo file ci sono 4 query così 1 fino a 75 da 76 a 200 da 201 a 500 e da 501 a 800
 
ciao
il LIMIT non dovrebbe essere DA A, ma quanti dal_numero, cione dovrebbe essere
LIMIT 75, 1 poi LIMIT 75,76 poi LIMIT 75, 151 ecc...
però comunque c'è (almeno da da quanto ho capito) un piccolo errore di logica:
tui vuoi se il punteggio (lo chiamo così) vale es. 70 mettere in campox "mediocre" , se 80 "buono".... o viceversa.
ma facendo come fai tu se il record n° 76 ha punteggio 75 campox diventa "buono", mentre dovrebbe essere "mediocre"
 
ciao
il LIMIT non dovrebbe essere DA A, ma quanti dal_numero, cione dovrebbe essere
LIMIT 75, 1 poi LIMIT 75,76 poi LIMIT 75, 151 ecc...
però comunque c'è (almeno da da quanto ho capito) un piccolo errore di logica:
tui vuoi se il punteggio (lo chiamo così) vale es. 70 mettere in campox "mediocre" , se 80 "buono".... o viceversa.
ma facendo come fai tu se il record n° 76 ha punteggio 75 campox diventa "buono", mentre dovrebbe essere "mediocre"

si cioè penso di averc apito che se scrivo limit 75,200 lui prende il range dalla riga 75 alla riga 200 giusto?

per il discorso dell'errore logico

io estraggo le prime 75 righe del campo "valore" ordinato per valore + alto quindi fino a 75 mette buono da 76 a 200 a 200 mediocre senza che manco vedo quanto sia effettivamente il valore.

non so se mi sono spiegato

però resta sto rpoblema che mi da errore anche su limit + bassi tiopo LIMIT 0,10
 
ciao
si cioè penso di averc apito che se scrivo limit 75,200 lui prende il range dalla riga 75 alla riga 200 giusto?
prende 75 record a partire dal 200centesimo, cioe prende il 200centesimo, il 201esimo, il 202esimo e così via sino al 274esimo

il tuo ragionamento fila se i "valori" sono unici, ma se possono essere duplicati ti puo capitare di avere (come minimo) due record con valore uguale posti al 75° uno ed al 76° l'altro, quindi perche (a parità di valore) il 75° diventa "buono" ed il 76° "mediocre"?
 
ciao

prende 75 record a partire dal 200centesimo, cioe prende il 200centesimo, il 201esimo, il 202esimo e così via sino al 274esimo

il tuo ragionamento fila se i "valori" sono unici, ma se possono essere duplicati ti puo capitare di avere (come minimo) due record con valore uguale posti al 75° uno ed al 76° l'altro, quindi perche (a parità di valore) il 75° diventa "buono" ed il 76° "mediocre"?

No scusa borgo credo tu ti stia confondendo anche eprchè nonostante mi dia l'errore però me li uppa giusti così cioè dal 1 al 75 dal 76 al 200 etc.

ti prego aiutami con sta cosa dell'errore

alla fine mi uppa i campi ma mi esce quest'errore
 
Ci vuole poco a vedere se borgo ha ragione. Basta dare un'occhiata al manuale di MySQL:
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants (except when using prepared statements).

With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return.
Quindi, scrivendo:
Codice:
SELECT * FROM tabella LIMIT 5, 10
La query recupererà dalla riga numero 5 alla riga numero 15 (5 + 10). Il primo valore indica la riga da cui partire, il secondo il numero di righe da selezionare. Se è specificato un solo valore, allora si parte dalla prima riga.
 
La query recupererà dalla riga numero 5 alla riga numero 15 (5 + 10). Il primo valore indica la riga da cui partire, il secondo il numero di righe da selezionare. Se è specificato un solo valore, allora si parte dalla prima riga.

si ma ne ero sicuro perchè mi uppava fino ad un certo punto poi mi dà errore e si interrompe e non ne vengo fuori

questo il messaggio

Si è verificato un errore.

Se il problema persiste, probabilmente il programma che hai tentato di eseguire non funziona correttamente, o perché qualcuno ci sta lavorando, o perché si tratta di un malfunzionamento dovuto a qualche bug di programmazione, in questo caso informaci.

praticamente ho provato ad isolarlo ed è qi che toppa

questo è los cript
PHP:
$q=mysql_query("SELECT * FROM tabella  ORDER BY valore DESC LIMIT 0,60")or die (mysql_error());
$number = mysql_numrows($q);
while($riga=mysql_fetch_array($q)){
$result=$riga['valore'];
 $up=mysql_query("UPDATE tabella SET campo='Ottimo' WHERE valore IN($result)");
}

$q=mysql_query("SELECT * FROM tabella  ORDER BY valore DESC LIMIT 61,200")or die (mysql_error());
$number = mysql_numrows($q);
while($riga=mysql_fetch_array($q)){
$result=$riga['valore'];
 $up=mysql_query("UPDATE tabella SET campo='Buono' WHERE valore IN($result)");
}
$q=mysql_query("SELECT * FROM tabella  ORDER BY valore DESC LIMIT 201,440")or die (mysql_error());
$number = mysql_numrows($q);
while($riga=mysql_fetch_array($q)){
$result=$riga['valore'];
 $up=mysql_query("UPDATE tabella SET campo='Medio' WHERE valore IN($result)");
}
$q=mysql_query("SELECT * FROM tabella  ORDER BY valore DESC LIMIT 441,900")or die (mysql_error());
$number = mysql_numrows($q);
while($riga=mysql_fetch_array($q)){
$result=$riga['valore'];
 $up=mysql_query("UPDATE tabella SET campo='Scarso' WHERE valore IN($result)");
}

è il quarto che salta

mettendole insieme si blocca a metà della terza query non uppa tutto allor ain una pagina ho messo le prime 3 query e fa tutto alla perfezione la quarta anche da sola dà errore
 
Tu devi estrarre tutti i record il cui ID sia compreso tra 441 e 900? Puoi farlo così:
Codice:
SELECT * FROM tabella WHERE id >= 441 AND id <= 900
Dovrai modificare anche le altre query SQL.

non propriamente devo prima listare da un valore + grande al più piccolo il campo "valore" e poi uppare i primi 100 i successivi 200 e così via

ma non 200 come valore ma come riga

quindi ordinati da 100 a 50 devo estrarre da 100 a 80 solo che non conoscendo che valore ci sia nell''intervallo ho epnsato di farlo ordinare in decrescene e poi con limit estrarre le righe
 
Ultima modifica:
trovato almeno credo

come clausola dell'update usavo
PHP:
 WHERE $result IN($valore)
però scorrendo il database ho notato che tra una query e l'altra capitavano valori simili quindi andava in pappa

ho cambiando la query odrinando epr valore estraggo la riga dell'id ed uippo
PHP:
 WHERE $result IN($id)

così va seppure non perfetto eprchè invece di 140 ne prende 139 e la 140° avendo valore uguale alla 141 finisce nella query seguente però eprlomeno roa va
 
ciao
@alex
da certi punti di vista monital ha ragione: ho invertito l'ofset con quante righe (mentre i numeri si, il ragionamento non cambia invertendo)
@monital
però ribadisco (a parte il blocco dello script) che il sistema funzia (con logica) solo se tutti i valori sono sempre diversi l'uno dall'altro, prendiamo questo caso ad es

riga 0 valore 999
riga 1 valore 990
ecc.....
riga 60 valore = 100
riga 61 valore = 100
ecc...

alla riga 60 verrà uppato il "campo" a ottimo
alla riga 61 verra uppato il "campo" a buono
in quanto non si sa come l'ORDER BY valore ordina nel caso di valori uguali e quindi perchè a parità di valore due giudizi diversi?
 

Discussioni simili