Autore Topic: aiuto con query sql  (Letto 886 volte)

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
aiuto con query sql
« il: 13 Maggio 2011, 20:10:24 CEST »
0
ho 1 problemino con 1 query sql...
al momento la mia query e' questa:
Codice: [Seleziona]
SELECT `gruppo` FROM `list` GROUP BY `gruppo`
e diciamo che questa query fa il suo lavoro... se non fosse che mi scrambla l'ordine ... ovvero mi ordina in automatico i gruppi in ordine alfabetico...
e' possibile in qualche modo disabilitare l'ordine e fargli creare i gruppi in base all'ordine di inserimento ?

metti che nella mia lista ho 200 righe
per ipotesi ho 20 gruppi... quindi avrei i gruppi
Codice: [Seleziona]
test1
test2
....
test19
test20

ora nel momento in cui vado a fare quella query il risultato sara':
Codice: [Seleziona]
test1
test10
test11
...
test19
test2
test20
test3
test4
...
test9

come posso modificare la query x far si che l'ordine sia = a quello di inserimento ?
(e' possibile farlo o devo separare la tabella e fare una tabella con solo i gruppi in modo da non dover usare il groupby?)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:aiuto con query sql
« Risposta #1 il: 13 Maggio 2011, 20:56:40 CEST »
0
In SQL in generale non c'è un modo di tirare fuori i dati nell'ordine di inserimento. Devi stabilire te un campo su cui fare una ORDER BY...

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:aiuto con query sql
« Risposta #2 il: 16 Maggio 2011, 12:55:48 CEST »
0
quoto Ricky.

in più aggiungo: metti un id progressivo autogenerato, che verrà aggiunto ad ogni inserimento.
A quel punto ti verrà facile ordinare per id.....
 8-)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto con query sql
« Risposta #3 il: 16 Maggio 2011, 13:25:48 CEST »
0
umm niente c'ho sbattuto la testa a lungo e alla fine ho rinunciato ^^ ho fatto la query che prende tutti i risultati e ho lavorato con il java :)

Codice (Java): [Seleziona]
while (c.moveToNext()) { // create group list
                        temp = c.getString(0);
                        if (!groupMap.containsKey(temp)) {
                                tempGroup.add(temp);
                        }

in questo modo ho avuto il risultato sperato :)

il problema della query sql era che i gruppi venivano ordinati o in ordine alfabetico o se usavo un order by id venivano sfalsati... in quanto il group id corrisponde all'ultimo elemento trovato...

quindi se si ha una lista di gruppi
for (i=0; i<5; i++) {
insert into db values (i, "gruppo"+i); //mischiato sql con java :P
}
insert into db values (5, "gruppo0");

se uso il group by il gruppo0 avra' id 5 e quindi sara' ordinato in questo modo
gruppo1
gruppo2
gruppo3
gruppo4
gruppo5
gruppo0

mentre io volevo che fossero ordinati in ordine di comparsa :)

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:aiuto con query sql
« Risposta #4 il: 16 Maggio 2011, 15:26:04 CEST »
0
Ma inserire un id progressivo ad ogni insert, come ti avevo detto io non va bene?

In generale, comunque, se non si tratta di un numero considerevole di dati, va pure bene che lo processi da codice, ma se riesci a trovare una soluzione che ti restituisca l'ordine che vuoi direttamente da query, è sicuramente più efficiente.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:aiuto con query sql
« Risposta #5 il: 16 Maggio 2011, 16:00:06 CEST »
0
order by ROWID

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto con query sql
« Risposta #6 il: 16 Maggio 2011, 16:17:26 CEST »
0
umm niente c'ho sbattuto la testa a lungo e alla fine ho rinunciato ^^ ho fatto la query che prende tutti i risultati e ho lavorato con il java :)

Codice (Java): [Seleziona]
while (c.moveToNext()) { // create group list
                        temp = c.getString(0);
                        if (!groupMap.containsKey(temp)) {
                                tempGroup.add(temp);
                        }

in questo modo ho avuto il risultato sperato :)

il problema della query sql era che i gruppi venivano ordinati o in ordine alfabetico o se usavo un order by id venivano sfalsati... in quanto il group id corrisponde all'ultimo elemento trovato...

quindi se si ha una lista di gruppi
for (i=0; i<5; i++) {
insert into db values (i, "gruppo"+i); //mischiato sql con java :P
}
insert into db values (5, "gruppo0");

se uso il group by il gruppo0 avra' id 5 e quindi sara' ordinato in questo modo
gruppo1
gruppo2
gruppo3
gruppo4
gruppo5
gruppo0 <--- e' l'id 5 e non id 0

mentre io volevo che fossero ordinati in ordine di comparsa :)

con order by rowid esce quello che ho scritto prima

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:aiuto con query sql
« Risposta #7 il: 16 Maggio 2011, 16:28:57 CEST »
0
come posso modificare la query x far si che l'ordine sia = a quello di inserimento ?
(e' possibile farlo o devo separare la tabella e fare una tabella con solo i gruppi in modo da non dover usare il groupby?)

c'è qualcosa che mi sta sfuggendo: se tu chiedi come fare a prendere una lista nello stesso ordine in cui vengono inseriti, L'UNICA soluzione è quella di utilizzare un id progressivo, di qualunque natura sia, per cui se C la inserisco prima di A, e A la inserisco prima di B, id(A)<id(B), id(C)<id(A) mi restituirà in ordine: C,A,B.

Se non è questo quello che vuoi dire allora spiega meglio, cortesemente, il problema.

Citazione
quindi se si ha una lista di gruppi
for (i=0; i<5; i++) {
insert into db values (i, "gruppo"+i); //mischiato sql con java
}
insert into db values (5, "gruppo0");

se uso il group by il gruppo0 avra' id 5 e quindi sara' ordinato in questo modo
gruppo1
gruppo2
gruppo3
gruppo4
gruppo5
gruppo0 <--- e' l'id 5 e non id 0

mentre io volevo che fossero ordinati in ordine di comparsa
Anche quì, non capisco bene cosa scrivi: il ciclo che utilizzi, eseguendolo, realizzerà i seguenti insert:
Codice (XML): [Seleziona]
insert into db values (0, "gruppo0");
insert into db values (1, "gruppo1");
insert into db values (2, "gruppo2");
insert into db values (3, "gruppo3");
insert into db values (4, "gruppo4");
e mi sembra che questo rispetti in pieno la tua richiesta.

Ti richiedo: puoi spiegare meglio il problema?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:aiuto con query sql
« Risposta #8 il: 16 Maggio 2011, 16:29:53 CEST »
0
scusa è, se li vuoi ordinati in base a come li hai inseriti fai come ha detto thebugger, _id integer autoincrement starts with 0.
se li vuoi ordinati per nome, allora devi fare un'order by name, anche se non so quanto sia accurato...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto con query sql
« Risposta #9 il: 16 Maggio 2011, 17:08:11 CEST »
0
fuori il for c'e' 1 altro insert :)

e la query avrebbe group by (o select distinct che alla fine danno lo stesso risultato :P) gruppo

praticamente l'insert sarebbe in questo caso
id,gruppo

anche se il mio db e' 1 po' + complicato dato che ha
id,nome,gruppo,quantita,codice,blablabla

ma cmq il succo e' lo stesso :)
praticamente per far un esempio molto vicino della mia situazione si puo' vedere quest'altro topic:
[facile] Visualizzare gli oggetti di una ListView in gruppi omogenei con titolo - Android Developers Italia

la situazione e' simile
e praticamente quello che mi serviva a me era una lista dei gruppi disponibili...

ora il problema e' che appena fai il group by perdi l'ordine dei gruppi (almeno che non usi una tabella esterna)....
quindi (dal post che ho linkato)


NAMETYPE
CaroteV
RucolaV
AranceF
MandariniF
BananeF
SaponeC
StracciC
PaneA

se io avessi questa tabella con il group by e order by id mi verrebbe fuori
V
F
C
A

nel momento in cui vado ad inserire una nuova verdura la tabella diverrebbe cosi':

NAMETYPE
CaroteV
RucolaV
AranceF
MandariniF
BananeF
SaponeC
StracciC
PaneA
InsalataV

e stavolta la query mi darebbe questo risultato
F
C
A
V

mentre io volevo lo stesso risultato del precedente.... potrai dire: ordina per gruppi... ma cosi' non si avrebbe + l'ordine del gruppo in base all'inserimento ...

non so se mi sono spiegato ora... il fatto e' che volendo semplificare al massimo il concetto taglio alcune parti :P e quindi mi perdo nel discorso :)


PS
l'ultimo reply in quel post ha uno screen della mia situazione attuale

o meglio della situazione che ottenevo con la query sql (senza order by)
mettendola con l'order by id invece mi usciva fuori l'altro problema che sto dicendo in questa risposta :)
« Ultima modifica: 16 Maggio 2011, 17:12:14 CEST da Trigun »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:aiuto con query sql
« Risposta #10 il: 16 Maggio 2011, 17:39:31 CEST »
0
ogni gruppo deve avere lo stesso id progressivo, e lo conservi in una tabella.
successivamente, nella tua tabella principale, associ l'id del gruppo, e puoi ordinare e/o raggruppare per id_gruppo.

Ora sei stato chiaro nell'esporre il tuo problema.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
Re:aiuto con query sql
« Risposta #11 il: 16 Maggio 2011, 17:52:37 CEST »
0
eh infatti come avevo presupposto all'inizio :D (primo post ultima riga :P)

perche' praticamente il database sara' riempito da 1 altro programma che devo ancora fare :)
che (probabilmente) mi fara' l'ocr di 120 pagine di roba e mi riempe il db (dovro' farmi una bella funzione ocr :P)
anche se spero di riuscire a farmi mandare direttamente le pagine in un formato digitale in modo da non dovermele scansionare :P

poi il problema e' che ogni settimana ste 120 pagine possono cambiare (il 99% rimarra' invariato ma ci sara' qualcosa in + o in -) e quindi stavo gia pensando al futuro su come gestire il tutto :)

ad es ricreare il db ogni volta non mi conviene perche' andrei a perdere la possibita' dello storico dato che cambierebbero ogni volta gli id (o cmq potrebbero cambiare)

quindi l'alternativa e' tenere tutto e avere una colonna del tipo VALIDO (SI/NO) e mostrare solo i validi :P