Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di ARCTiC
    Registrato dal
    Sep 2002
    Messaggi
    2,814

    [MySQL] Ricerca dati univoci

    Ho un problemuccio che sembrava semplice, ma ci sto impazzendo (ho gia' perso un'ora su NG e ricerche varie senza trovare la soluzione).

    Ho una tabella fatta in questo modo:

    nome parm ordine
    ------------------
    marco bim 3
    paolo bum 1
    marco bam 2
    fabio bim 1
    paolo bum 5

    Dovrei poter avere un risultato con "nome" univoco (non ripetuto), con il minimo "ordine" e poter prelevare anche gli altri campi (nel mio esempio solo "parm"), il tutto ordinato per "ordine". Cioe' questo:

    paolo bum 1
    fabio bim 1
    marco bam 2

    Le ho provate tutte ma non ci sono riuscito con una sola query. Quindi la domanda e' si puo' fare con una sola query o devo scorrermi tutti i record e utilizzare due query?

    PS: non posso installare MySQL 4.1
    In Vino Veritas, In Scarpe Adidas, In Bagno Badedas, In Culo un Ananas ©2003 ARCTiC

  2. #2
    Utente di HTML.it L'avatar di ARCTiC
    Registrato dal
    Sep 2002
    Messaggi
    2,814
    Vi prego, aNgiuTaTemi prima ke perdo la testa
    In Vino Veritas, In Scarpe Adidas, In Bagno Badedas, In Culo un Ananas ©2003 ARCTiC

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Se l'accoppiata ordine-nome è univoca prova una cosa del genere:

    SELECT NOME,PARM,MIN(ORDINE) FROM TABELLA GROUP BY NOME

  4. #4
    Utente di HTML.it L'avatar di ARCTiC
    Registrato dal
    Sep 2002
    Messaggi
    2,814
    [supersaibal]Originariamente inviato da Teuzzo
    Se l'accoppiata ordine-nome è univoca prova una cosa del genere:

    SELECT NOME,PARM,MIN(ORDINE) FROM TABELLA GROUP BY NOME [/supersaibal]
    Non c'e' l'ordinamento della query.. e pure se creo un alias sul MIN(ORDINE) il "GROUP BY" precede l'ordinamento e quindi mi prende solo il primo record del database per quel "NOME".

    Io ho trovato una soluzione ma purtroppo funziona solo sotto 4.1:

    "SELECT * FROM tabella WHERE (nome,ordine) IN (SELECT nome,MIN(ordine) FROM tabella GROUP BY nome) GROUP BY nome,ordine ORDER BY ordine"

    In Vino Veritas, In Scarpe Adidas, In Bagno Badedas, In Culo un Ananas ©2003 ARCTiC

  5. #5
    Utente di HTML.it L'avatar di ARCTiC
    Registrato dal
    Sep 2002
    Messaggi
    2,814
    Ho risolto con questa:

    "SELECT DISTINCT name, parm, MIN(ordine) as mintime FROM tabella GROUP by name ORDER BY mintime";

    ...quindi poi leggo mintime invece che ordine dalla row. Adesso pero' ho uno strano problema, in ordine ci sono valori con 3 cifre decimali, quando vado a prendere il minimo, invece di ritornarmi quel valore mi ci aggiunge X cifre decimali apparentemente a caso... ad esempio, ho questi valori in "ordine":

    3.234
    1.123
    4.567

    il MIN(ordine) mi ritorna: 1.1239999999

    Mah! :master:
    In Vino Veritas, In Scarpe Adidas, In Bagno Badedas, In Culo un Ananas ©2003 ARCTiC

  6. #6
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    [supersaibal]Originariamente inviato da ARCTiC
    Ho risolto con questa:

    "SELECT DISTINCT name, parm, MIN(ordine) as mintime FROM tabella GROUP by name ORDER BY mintime";

    ...quindi poi leggo mintime invece che ordine dalla row. Adesso pero' ho uno strano problema, in ordine ci sono valori con 3 cifre decimali, quando vado a prendere il minimo, invece di ritornarmi quel valore mi ci aggiunge X cifre decimali apparentemente a caso... ad esempio, ho questi valori in "ordine":

    3.234
    1.123
    4.567

    il MIN(ordine) mi ritorna: 1.1239999999

    Mah! :master: [/supersaibal]

    DISTINCT non serve perchè GROUP BY restituisce un solo record per ogni name.
    Per le cifre decimali prova ROUND(MIN(ordine),3).

  7. #7
    Utente di HTML.it L'avatar di ARCTiC
    Registrato dal
    Sep 2002
    Messaggi
    2,814
    [supersaibal]Originariamente inviato da Teuzzo
    DISTINCT non serve perchè GROUP BY restituisce un solo record per ogni name.
    Si, in effetti l'ho dimenticato dalla precedente query.

    Per le cifre decimali prova ROUND(MIN(ordine),3). [/supersaibal]
    Grazie, il problema e' che round mi approssima non mi taglia le cifre... e non sono nemmeno sicuro che le cifre vengano semplicemente "aggiunte", se invece di mette a "girarci intorno" (es: 1.123 puo' diventare: 1.1239999 oppure: 1.1229999) diventa un bel casino. Chissa' perche' lo fa.. pare essere un bug del vecchio MySQL.
    In Vino Veritas, In Scarpe Adidas, In Bagno Badedas, In Culo un Ananas ©2003 ARCTiC

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.