Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 Cultura Informatica
 Cultura Informatica
 [MYSQL] - on duplicate key update con più record

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
Dragon83 Inserito il - 27/02/2010 : 16:44:40
vi spiego il problema.
ho una tabella con 3 campi: id, nome, cognome e telefono

ogni tanto inserisco un elenco completo di persone e se ce n'è qualcuno già inserito, aggiorna solo il telefono.

memorizzo in una variabile testuale tutti i record così:

for($i=1;$i<=$tot_nomi;$i++)
  {
   if($i>1) $ins .= ',';
  $ins .= "($nome,$cognome,$tel)";
  }

INSERT elenco(nome, cognome, telefono) VALUES".$ins." ON DUPLICATE KEY UPDATE telefono = ????


in questo modo faccio un'unica query ma c'è un problema: come potete vedere ho messo i punti interrogativi.
Come faccio a dire a mysql di aggiornare il campo telefono con l'ultimo dei 3 valori della insert corrispondente a quel record?

1) soluzione che ho trovato è fare più query ma è improponibile con centinaia di record.
2) ho provato con replace ma perderei i dati in un'altra tabella a causa delle foreign keys
11   U L T I M E    R I S P O S T E    (in alto le più recenti)
Dragon83 Inserito il - 04/03/2010 : 12:41:34
ammetto di aver fatto il conto vagamente a occhio :P

i tool minifier li conosco già; anzi, ho inserito il plugin Jsmin su Pspad. Peccato che non ci sia il corrispettivo per il css.
noname Inserito il - 04/03/2010 : 00:21:55
Bene!

Ma come è possibile che ti viene da 13KB se sono da 300b l'uno?

Se vuoi spingerti ancora oltre puoi lavorare anche sulle dimensioni dei file js e css. Ci sono dei tool che li comprimono e li ottimizzano ;)
Dragon83 Inserito il - 03/03/2010 : 23:08:26
li avevo già letti entrambi. grazie lo stesso

si, gli sfondi a cui vorrei applicarli sono bordi verticali e orizzontatali. facendo un rapido conto potrei caricare 4 immagini orizzontali e 3 verticali (7 richieste) in 2 file sprite

ho provato anche a mettere tutto il css del sito in un unico file (beh quasi unico) e nonostante la grandezza sia passata da circa 300B ciascuno (7-8 file) a 13KB in uno solo, la velocità è aumentata tantissimo!!!.
Secondo Firebug, quel file css, sta sui 90ms in locale e in totale ho guadagnato 1s passando da 2s circa a 1, ovviamente ricaricando la pagina, altrimenti sto su una media di 400ms a pagina.
Se riesco a "spritare" anche le immagini ripetute i tempi dovrebbero abbassarsi ancora.
noname Inserito il - 03/03/2010 : 15:01:34
Ho trovato un link dove sono spiegati bene in italiano (anche se dovrebbe usare le classi per le icone dei link):
http://lau.csi.it/realizzare/accessibilita/fogli_di_stile/sprites/index.shtml

La tecnica degli sprite CSS non è adatta per sfondi ripetuti. Al massimo potrebbe funzionare per sfondi ripetuti su un solo asse.

Se vuoi approfondire:
http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/

Ciao!
Dragon83 Inserito il - 01/03/2010 : 21:00:42
ho provato ad usare gli sprite ma non risco a caricare le immagini con repeat. Inoltre fanno un casino con la proprietà width. Praticamente io uso la stessa immagine larga 1px per disegnare i div, ma questi ultimi non sono tutti uguali; perciò succede un casino perchè imposta la larghezza di tutti i div con quella classe con la larghezza dell'immagine. A parte che ho notato un peggioramento nei caricamenti (in locale) ma comunque per usare questo sistema in tutto il sito devo modificare la struttura html attuale e ora non ho tempo.

Poi se mi spieghi come faccio a usare repeat-x e repeat-y con le sprite mi fai un fischio. Ho provato creando delle classi a parte con png separati per il verticale e orizzontale ma c'è sempre qualcosa che non va.

EDIT: sono vagamente OT
noname Inserito il - 28/02/2010 : 23:17:39
Gli sprite si usano anche per velocizzare il caricamento delle pagine. Accorpi tutte le immagini in una e con i css regoli l'offset dello sfondo, in modo da visualizzare la parte che ti interessa. Oltre a guadagnare KB sull'immagine, riduci il numero di richieste e il tempo di caricamento, e le immmagini vengono renderizzate contemporaneamente sulla pagina.

Se usi le classi per interfacciarti con mysql, usi l'estensione mysqli, che mi sa è l'unica a prevedere anche un accesso object oriented. La differenza è nella libreria. In giro trovi vantaggi/svantaggi di usare le funzioni mysql o mysqli.

Volendo puoi mantenere lo stile procedurale, e forse te la puoi cavare anche con un search and replace, perchè la maggior parte dei nomi delle funzioni varia per la "i"


Dragon83 Inserito il - 28/02/2010 : 19:40:51
gli sprite css non si usano solo con i rollover?

per quanto riguarda le PS hai ragione: con ajax forse sono meglio le stored. Tra l'altro ho tutto fatto con le funzioni mysql e non mysqli; e per giunta pure procedurali. Prima di usare le PS dovrei aggiornare tutto.

Anzi visto che mi trovo. Ci sono dei vantaggi ad usare una cosa tipo?:

$mysql->fetch_row($Recordset)...

anzichè

mysql_fetch_row($Recordset)...

Fin'ora ho usato sempre il secondo perchè il php l'ho imparato così. Le classi le ho scoperte da poco per necessità ma in questo caso non ne capisco l'utilità
noname Inserito il - 28/02/2010 : 14:40:42
Bella soluzione, me la segno :)

Per l'ultima domanda, in genere una PS non sopravvive tra due richieste successive nelle applicazioni web. Per cui avresti che la PS viene interpretata e compilata ogni volta, con un peggioramento di performance rispetto alle semplici query. Per ottenere un guadagno (ma è sempre meglio appurarlo con un benchmark) dovresti usare la query molte volte all'interno dello stesso script. Quindi sarebbe meglio fare una chiamata AJAX che veicola tutti i dati da inserire. Tra l'altro se vuoi ottimizzare, questo è molto importante. Uno dei principali colli di bottiglia delle applicazioni web consiste nel numero di richieste HTTP. Ed è per questo che molte tecniche di ottimizzazione si basano sulla riduzione delle richieste, ad esempio fondere tutti i file js e i file css in un unico file js e css, usare gli sprite css (tipo qui: http://www.google.com/images/nav_logo7.png ), elaborare i dati in blocco, etc...

Se fai qualche benchmark fammi sapere ;) , l'argomento è molto interessante

Dragon83 Inserito il - 27/02/2010 : 18:54:27
Citazione:
Messaggio inserito da noname

Potresti pure usare le prepared statement per migliorare le performance


inizialmente pensavo ti riferissi alle stored procedure ma dopo aver approfondito devo dire che non le conoscevo.

Secondo te questi PS possono essere utilizzati anche in pagine php chiamate da AJAX?
mi spiego: io inserisco nel db un valore alla volta tramite ajax cliccando su un pulsante a cui è associato un evento js. Nella pagina php che viene richiamata faccio una query ogni volta. In questo caso posso dichiarare un PS e associargli i valori ogni volta? Spero di essere stato chiaro
Dragon83 Inserito il - 27/02/2010 : 17:35:57
Citazione:
Messaggio inserito da noname

Non puoi fare due query (controllo e insert o update) per ogni inserzione invece di una sola? Su centinaia di record sono veramente poche...


così devi comunque richiamare il db e occupare la tabella per centinaia di volte. Conta che ci sono anche gli accessi degli utenti; il db non è mirato ad un uso individuale come durante gli esami. Preferisco ottimizzare al massimo.
Comunque alla fine ci sono riuscito.

si fa così:
Citazione:
INSERT elenco(nome, cognome, telefono) VALUES".$ins." ON DUPLICATE KEY UPDATE telefono = VALUES(telefono)



l'ho trovato googoleggiando un po' perchè sul sito ufficiale mysql stranamente non ho trovato alcun riferimento chiaro. Se c'è, deve essere veramente imboscato.

grazie comunque per l'attenzione
noname Inserito il - 27/02/2010 : 17:06:59
Non puoi fare due query (controllo e insert o update) per ogni inserzione invece di una sola? Su centinaia di record sono veramente poche... Potresti pure usare le prepared statement per migliorare le performance

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,06 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000