Autore Topic: aiuto su sql  (Letto 1667 volte)

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
aiuto su sql
« il: 19 Marzo 2012, 10:12:03 CET »
0
nel mio database ho una tabella formata in questo modo id articolo, data, quantità
è possibile fare una query che aggiorni la quantità di una data facendo quantità + quantità data2?
nel senso qualcosa come
select *, sum(quantità) where data = 1\1\2000 or data = 1\2\2000 group by id
e il sum quantità direttamente salvato con data 1/1/2000
è possibile fare una cosa del genere? o devo farlo lato codice ?

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:aiuto su sql
« Risposta #1 il: 19 Marzo 2012, 15:48:06 CET »
0
Scusami ma non ho capito bene la domanda.
Vuoi modificare il contenuto di una tabella con una select?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:aiuto su sql
« Risposta #2 il: 19 Marzo 2012, 16:10:13 CET »
0
Non è possibile perchè sum somma i valori numerici che trova nella colonna che tu gli passi quindi devi fare questa operazione lato codice

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #3 il: 19 Marzo 2012, 16:43:35 CET »
0
Scusami ma non ho capito bene la domanda.
Vuoi modificare il contenuto di una tabella con una select?
si e no
la query mi fa vedere i dati che io vorrei inserire
nel senso che i dati della sum poi devono essere reinseriti nel db con un'altra query... xo' non so se si può fare senza andarmi ad elaborare i dati io lato codice che è più lento....
praticamente dovrei fare la query e i dati di quella query quindi (select id,data,sum(quantita) ) andarli a reinserire nel db con un edit (dato che devo modificare una tupla già inserita)
potrei farlo lato codice... ma significherebbe ogni volta fare 4000 query... non è molto bella come cosa :-)

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:aiuto su sql
« Risposta #4 il: 19 Marzo 2012, 16:54:12 CET »
0
Eh come ti capisco! Interrogare in modo ottimale i db è sempre un lavoraccio che richiedere parecchio tempo...
Comunque temo che tu debba lavorare in parte via codice. Che linguaggio stai usando?

Comunque dovresti fare 1 query (select per l'interrogazione) e 1 query (update per la modifica).

Ricordati che ci sono parecchi trucchetti per l'ottimizzazione delle query.
  Mysql Query Optimization

10 Tips for Optimizing MySQL Queries (That don't suck)

Ho trovato questi siti (forse ce ne sono di migliori) che contengono qualche trucchetto su come creare le table e fare ottimizzazioni.

Comunque djdedo credo che abbia ragione sulla sum che vuoi fare tu.

Se provi a postare qualche esempio di codice posso darti una mano =)


Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #5 il: 19 Marzo 2012, 17:03:42 CET »
0
beh farlo lato codice è una cavolata...
lo scrivo in pseudocodice/pseudojava/pseudosql

Codice: [Seleziona]
sql = select id,sum(quantita) from tabella where data = ? or data = ? group by id
params = { data1,data2}
cursore = eseguiquery(sql)

while cursore.movetonext() { // ci sono una media di 1000 tuple
sql2 = update tabella set quantita = cursore.getint(1) where id = cursore.getint(0) and data = data1
eseguiquery(sql2)

}

sql3 = delete from tabella where data = data2
eseguiquery(sql3)


solo che fare una cosa del genere è lentissima...

cmq ovviamente il database è quello android quindi sqlite

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:aiuto su sql
« Risposta #6 il: 19 Marzo 2012, 17:28:55 CET »
0
beh farlo lato codice è una cavolata...
lo scrivo in pseudocodice/pseudojava/pseudosql

Codice: [Seleziona]
sql = select id,sum(quantita) from tabella where data = ? or data = ? group by id
params = { data1,data2}
cursore = eseguiquery(sql)

while cursore.movetonext() { // ci sono una media di 1000 tuple
sql2 = update tabella set quantita = cursore.getint(1) where id = cursore.getint(0) and data = data1
eseguiquery(sql2)

}

sql3 = delete from tabella where data = data2
eseguiquery(sql3)


solo che fare una cosa del genere è lentissima...

cmq ovviamente il database è quello android quindi sqlite

Guarda così su due piedi non mi viene in mente niente di molto utile... Forse si può evitare la sql3 modificando l'update... Però Non è quello che cambia di molto il processo...

Il punto è che comunque devi fare SEMPRE una query per sapere quante date devi sommare e 1 query poi per l'update...
« Ultima modifica: 19 Marzo 2012, 17:33:33 CET da Mr.Donut »

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #7 il: 19 Marzo 2012, 18:30:56 CET »
0
eh mi ricordo che quando studiavo "basi di dati" riuscivo a fare cose del genere usando view o cose simili... ma nel momento in cui ho passato l'esame ho rimosso tutto :-P

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:aiuto su sql
« Risposta #8 il: 19 Marzo 2012, 18:34:22 CET »
0
Il fatto è che comunque sqlite manca di questi strumenti per mantenerlo leggero. Io credo che se il tuo db è complesso e così corposo sia il caso di utilizzare un db server da interfacciare all'app attraverso un webservices tipo ad esempio mysql

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #9 il: 19 Marzo 2012, 18:37:14 CET »
0
la mia app funziona offline...
dovrei scaricarmi il database ogni volta che lo accendo...
gia quando parte l'app deve precaricare tutto il database e portarlo in oggetti... se poi dovesse scaricarsi anche i dati da internet.. sarebbe la fine :-)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:aiuto su sql
« Risposta #10 il: 19 Marzo 2012, 18:48:06 CET »
0
Premetto che non ho molta esperienza con i db su dispositivi mobili ma tieni conto che comunque le risorse a disposizione sono molto risicate quindi se si ha tutta questa complessità forse la strada scelta non è quella giusta.

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:aiuto su sql
« Risposta #11 il: 19 Marzo 2012, 20:05:57 CET »
0
Non vorrei dire una megaboiata, ma una soluzione alternativa non potrebbe essere il creare una tabella nuova copiando solo le row che ti servono, con le opportune condizioni, e droppare poi quella vecchia?

Ah l'esame di database... Non ricordo quanti anni siano passati da quando l'ho sostenuto XD

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #12 il: 19 Marzo 2012, 20:34:18 CET »
0
Non vorrei dire una megaboiata, ma una soluzione alternativa non potrebbe essere il creare una tabella nuova copiando solo le row che ti servono, con le opportune condizioni, e droppare poi quella vecchia?

Ah l'esame di database... Non ricordo quanti anni siano passati da quando l'ho sostenuto XD
eh okkey... ma da una select come faccio a fare una insert? è questo il problema :-P potrei fare la insert con una data fittizia e poi fare l'edit e andare a cancellare la data vecchia e un update per cambiare la data fittizia con la data giusta

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:aiuto su sql
« Risposta #13 il: 19 Marzo 2012, 20:37:40 CET »
+1
Boh non mi sembra così strana come cosa da fare...

SQL INSERT INTO Statement

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto su sql
« Risposta #14 il: 19 Marzo 2012, 20:56:19 CET »
0
ebbehhhhhh pinolalavatrice grazie :-P

mi ricordavo si potesse fare... non mi ricordavo come  :-P avevo in mente roba di creazione view e cose strane che so che esistono ma non ricordo a che servono :-)
ma all'esame di "basi di dati" (e non database) avevo fatto cose mostruose con 1 singola query... quindi sapevo che era fattibile :-P
« Ultima modifica: 19 Marzo 2012, 20:58:00 CET da Trigun »