Newsgroup: it.comp.www.php
Titolo: [MYSQL-PHP] UPDATE, problemi

Ciao a tutti
Ho  una pagina in php che mi mostra le foto del mio db.
NEl db ho un campo ordinamento che mi permette di ordinare la
visualizzazione delle foto nella pagina.
In una pagina in php tramite delle select permetto all'utente di assegnare
alle immagini un valore numerico da 1 a N. in base al numero di fato.
A questo punto io passo dal form a una pagina php una stringa del tipo
record1ordinamento=7&record2ordinamento=6&record3 ordinamento=1
etc etc
Come fare la query in php nn ci avevo mica pensato!
Devo fare un UPDATE, fin qui ci sono.
Ma come faccio la query? Posso farne una sola? Come? Essendo i where tanti
quanti sono i record? Devo fare tante query quanti sono i record in un
ciclo???
Boohhhh

 query quanti sono i record in un ciclo???
Si*.
Voldeno ottimizzare il numero di query puoi fare un UPDATE per ogni
valore da 1 ad N se ci sono foto con quel voto.
L'ottimizzazione sarebbe evidente sicuramente se il numero di foto e'
maggiore di N e comunque si attesterebbe sempre in un numero di query
<=N
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

Quindi devo fare N query!!!
Certo faccio un ciclo che inserisce il valore, e quindi fa la query solo se
il valore passato è diverso da 0 o diverso da nullo...
Però sono tante le query...
E' un problema?
Sarà lento? Incasinerà il server?
Scusa ma sono un pò newbie!
Grazie
"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:73i6c.78835$FJ6.2...@twister1.libero.it...


 Sar` lento? Incasiner` il server?
Se in una pagina ha 10 immagini ed i possibili valori sono da 1 a 5 il
numero massimo di query chee seguirai con l'algoritmo proposto e' 5
contro le 10 che dovresti fare per ogni singola immagine.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z


Beh i valori sono tanti quanti le immagini..
Dato che si tratta di ordinamento...se le immagini sono 100 posso dare un
valore da uno a 100!!!
Ovviamente osno meno!!!
"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:0ni6c.75451$Kc3.2...@twister2.libero.it...


 Ovviamente osno meno!!!
c'è ovviamente un modo per fare questo in maniera più diretta...
memorizzare l'ordinamento codificato, risultato una sola query...
crei una tabella tblUSERSORT con
IDUserSort
IDAlbumFotografico
CodificaOrdinamento
per codifica puoi usare una banale stringa di indici con separatori
es: 5 foto ordinamento 5,3,1,2,4
codifica : "5,3,1,2,4" oppure "5#3#1#2#4"
ottieni che la posizione 0 è della foto 5 e così via....
aggiornare il nuovo ordinamento è banalmente una update della 
CodificaOrdinamento.
Utilizzando le funzioni sulle stringhe e sugli array riesci molto 
semplicemente a passare dalla codifica all'ordinamento e viceversa.
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

 ha scritto nel messaggio
news:c3cdh5$26ri26$1...@ID-201944.news.uni-berlin.de...


 dal valore...e farli diventare un array.... boooohh
bé se sai farlo per un dato sai farlo per tutti, inserirli in una array 
non ti serve, la codifica è una stringa, eventualemente dopo, quando 
recuperi la codifica ti è più comodo trasformare la stringa in una array 
che conterrà l'ordinamento.
$codifica=",".$codifica.$_POST["NOMEIMMAGINE1"];
...
o in un modo più furbo se sai quante sono le immagini
es.: k immagini le select si chiamano NOMEIMMAGINE, 
NOMEIMMAGINE1,...,NOMEIMMAGINEk:
$codifica="";
$codifica=$codifica.$_POST["NOMEIMMAGINE"];
for($=1;$i<k,$i++){
     $codifica=",".$codifica.$_POST["NOMEIMMAGINE".$i];
}
$codifica contiene la codifica richiesta.


 ha scritto nel messaggio
news:c3ch08$2673tb$1...@ID-201944.news.uni-berlin.de...


 tabella in modo moooolto semplice...
oltre che newbie sembrerebbe pure che tu
1) non hai mai programmato niente, manco i lvideoregistratore ;)
2) non hai mai letto un manuale php (molto grave)
3) non hai la più pallida idea di come si lavori su un db
da queste premesse ho come dire l'impressione che tu o sei un troll o 
una persona mooooolto sprovveduta che pensa che si possa imparare a 
programmare scaricando script a destra e a manca e andando per tentativi.
Per capirci non mi sognerei di chiedere  come Opportunity compensa la 
traiettoria mentre i muove a gravità marziana se non ho nemmeno la più 
pallida idea di cosa sia Marte....
Probabilmente ti sei messa in una cosa più grande di te, inizia dal 
principio e passa php dopo aver acquisito le basi di programmazione, di 
web e Database, temo che quello che hai appena incontrato non sia il 
problema più difficile che dovrai risolvere, e non credo che per 
iniziare sia buona norma partire da una cosa incasinata come hai fatto 
tu, a meno che non ti paghino, e allora ....


Un troll?
Beh manuale di php l'ho letto si..
NOn sono sicuramente esperta..non ho fatto studi approfonditi a riguardo.
FInora ho solo usato il db per registrare le immagini, descrizioni etc e
per generare quindi dinamicamente le pagine.
Per render possibile una ricerca.
Per passare dati a flash.
NOn per questo sono esperta...ci sto solo provando!
Cmq grazie lo stesso per l'aiuto...


 programmare scaricando script a destra e a manca e andando per tentativi.
E cmq non mi scarico script a destra e a manca ma questo me lo sto facendo
io...anzi, sto provando di farlo io..
Il problema era solo l'ordinamento...lo aggirerò se non riesco a
risolverlo!
Ciao

 ottieni che la posizione 0 č della foto 5 e cosě via....
Viva la normalizzazione :)
Puo utilizzare anche un approccio migliore.
Una seconda tabella collegata 1 a molti con quella delle immagini.
Oltre ai campi chiave un campo ordinamento.
Per inserire gli ordinamenti sono sufficiente due query:
1^ DELETE della tabella secondaria
2^ INSERT multiplo come da manuale:
-- 
I am what I am, I do what I can


 > ottieni che la posizione 0 è della foto 5 e così via....


 Che significa viva la normalizzazione?
http://www.google.it/search?sourceid=navclient&hl=it&ie=UTF-8&oe=UTF-8&q
=normalizzazione [ 
http://url.repository.biz/go/2n
 ]


 2^ INSERT multiplo come da manuale:
che è come fare n+1 query, anche se ne scrivi solo 2 :), il fatto è che 
per ogni utente e per ogni galleria si dovrebbe costruire una tabella e 
complicare comunque le operazioni.
Con la codifica, se mette addirittura i nomi dei file (e i file non sono 
blob) ottiene direttamente l'elenco e l'ordine di visualizzazione. E fa 
sempre e solo una query.
A occhio direi che la soluzione della codifica è la più efficiente, deve 
solo concatenare le option e fare una update... la soluzione che 
prospetti tu è comunque meno efficiente delle n update, che ovviamente 
possono essere inviate a MYSQL tutte assieme separate da ; in una sola 
operazione e generate in 2 righe di codice contate.


 contate.
Un query di inserimento multiplo e' nettamente piu' efficiente dello
stesso numero di query di update.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z


 stesso numero di query di update.
e il costo delle delete dove lo mettiamo? delete n elementi e insert n 
elementi... sicuro che 'costi' più di n update?
considerando nulli i costi della comunicazione delle query.


 i costi della comunicazione delle query.
Perche' dovremmo considerare nulli i costi di comunicazione? 
MySQL ottimizza internamente gli INSERT multipli. Effettuare un DELETE
ed un INSERT multiplo risulta piu' efficiente di effettuare un UPDATE
tenendo conto el fatto che il campo su cui viene fatto il filtro del
DELETE e' comunque un campo chiave per cui indicizzato per essere
velocemente selezionato.
-- 
I am what I am, I do what I can


 velocemente selezionato.
queste ultime affermazioni le verificherei con un timer, non sono sicuro 
che il risultato non cambi enormemente in funzione del crescere di n.


 crescere di n.
Bane, aspetto i tuoi benchmark.


Ciao,
Setec Astronomy wrote:
non avevo nessuna intenzione di far diventare un ragionamento una 
discussione, cercavo solo di capire.
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra


 Types.
dunque, solo per capire, magari sbaglio qualche cosa...
provo a confrontare perché non mi riesce di ottenere i tuoi risultati...
la tabella che proponevo  usersort con id, idutente e codifica, in 
partenza ho ignorato le categorie, per il momento tralasciamo anche 
nella tua tabella orderings che diventa ID, IDUtente, Ordering.
tolti i primi due campi, abbiamo da confrontare la codifica e Ordering...
usando una stringa posso scegliere un char, per esempio ipotizzando 125 
immagini con codici di 3 cifre (000,234...)e comprendendo i separatori 
avrei 1 char 1 Byte e quindi una codifica è una stringa di 125*3+124 
elementi (499 Byte) Ho necessità di una codifica per ogni utente 
(nell'ipotesi di una galleria per utente). Chiaro che se uso un varchar 
e degli interi questa codifica è più piccola ("001,002,003" e "1,2,3" 
per capirci, la differenza c'è.)
Utilizzando un integer 4 Byte, hai la necessità di un record per ogni 
foto della galleria, e quindi 4*125 Byte= 500 (in altre ipotesi es 
tinyint è solo 125).
La differenza è che le chiavi che sono in ogni record per la tua 
implementazione sono ripetute per ogni foto...
per cui nella mia ipotesi io conto nell'esempio con 125 foto in ogni 
galleria 2 INTEGER + CODIFICA(caso pessimo)= 8+499=507
nel tuo caso ci sono 125*(3 INTEGER)=125*3*4=1500
quindi una tua galleria "pesa" come 3 delle mie...
Questo è semplicemente stato il mio "ragionamento", non mi sono messo a 
fare statistiche o calcoli complessi, magari ho sbagliato qualche 
ragionamento, se così fosse me ne scuso.
