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
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 27/02/2010 : 16:44:40  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 27/02/2010 : 17:06:59  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 27/02/2010 : 17:35:57  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 27/02/2010 : 18:54:27  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 28/02/2010 : 14:40:42  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
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

Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 28/02/2010 : 19:40:51  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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à
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 28/02/2010 : 23:17:39  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
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"


Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 01/03/2010 : 21:00:42  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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

Modificato da - Dragon83 in data 01/03/2010 21:02:10
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 03/03/2010 : 15:01:34  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
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!
Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 03/03/2010 : 23:08:26  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 04/03/2010 : 00:21:55  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
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 ;)
Torna all'inizio della Pagina

Dragon83
Padawan

linux_jedi


Regione: Puglia
Città: Foggia


Inserito il - 04/03/2010 : 12:41:34  Mostra Profilo  Visita l'Homepage di Dragon83  Clicca per vedere l'indirizzo MSN di Dragon83 Invia a Dragon83 un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,23 secondi.

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