Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Progressivo per gruppi in tabella mysql

    Ho una query così strutturata:

    SELECT `PROVA`.`id` AS ID,
    `PROVA`.`EXIF.DateTimeOriginal` AS DATA,
    `PROVA`.`FILE.FileName` AS FILENAME,
    CASE `CARTELLA` WHEN '' THEN 'ALTRO' ELSE `cartella` END AS CARTELLA,
    CASE `CARTELLA` WHEN '' THEN 1 ELSE 2 END AS PRIMAALTRO
    FROM `PROVA` AS `t2`
    ORDER BY PRIMAALTRO ASC, DATA ASC

    scorrendo la quale ottengo:

    10 06/10/2013 foto_id_00000010.jpg ALTRO
    4 02/06/2012 foto_id_00000004.jpg primo
    6 03/06/2012 foto_id_00000006.jpg primo
    3 03/06/2012 foto_id_00000003.jpg terzo
    1 02/03/2013 foto_id_00000001.jpg terzo
    5 02/03/2013 foto_id_00000005.jpg secondo
    11 11/03/2013 foto_id_00000011.jpg secondo
    9 11/03/2013 foto_id_00000009.jpg quarto
    2 11/03/2013 foto_id_00000002.jpg secondo
    7 06/10/2013 foto_id_00000007.jpg quinto
    8 06/10/2013 foto_id_00000008.jpg secondo


    vorrei aggiungere un campo alla tabella della query e non fisicamente nel database, che eseguita la query mi restituisse questo:


    10 06/10/2013 foto_id_00000010.jpg ALTRO 1
    4 02/06/2012 foto_id_00000004.jpg primo 2
    6 03/06/2012 foto_id_00000006.jpg primo 2
    3 03/06/2012 foto_id_00000003.jpg terzo 3
    1 02/03/2013 foto_id_00000001.jpg terzo 3
    5 02/03/2013 foto_id_00000005.jpg secondo 4
    11 11/03/2013 foto_id_00000011.jpg secondo 4
    9 11/03/2013 foto_id_00000009.jpg quarto 5
    2 11/03/2013 foto_id_00000002.jpg secondo 4
    7 06/10/2013 foto_id_00000007.jpg quinto 6
    8 06/10/2013 foto_id_00000008.jpg secondo 4

    che numerasse quindi progressivamente i gruppi dati dall'ultima colonna di nome CARTELLA.

    E' tutto il pomeriggio che mi ci scervello!!!!
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    hai la possibilità di eseguire stored procedures?

  3. #3
    Purtroppo non só nemmeno cosa sia!
    Prima o poi anch'io vi insegnerò qualcosa

  4. #4
    hai una tabella dove sono definite le CARTELLE ?

  5. #5
    Non so cosa intendi, forse la tabella da dove estraggo i record?

    CREATE TABLE IF NOT EXISTS `PROVA` (
    `id` mediumint(8) unsigned NOT NULL auto_increment,
    `cartella` varchar(255) NOT NULL default '',
    `FILE.FileName` varchar(255) NOT NULL default '',
    `EXIF.DateTimeOriginal` varchar(255) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

    Te l'ho semplificata con i soli campi necessari, ricorda NON VOGLIO un campo progressivo fisicamente in tabella ma solamente quando eseguo la query.

    Grazie anticipato per l'interessamento
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    Ho cercato info su queste stored procedures e a grandi linee ho capito cosa sono, francamente peró dopo un paio di prove quasi a caso, mi sono fermato. Da cosa vedo se posso eseguirle o meno? E nel caso, come le utilizzo? Al momento è arabo...
    Prima o poi anch'io vi insegnerò qualcosa

  7. #7
    la colonna cartella potrebbe far riferimento a una tabella dove sono inserite tutte le cartelle con un loro id, e quindi otterresti il tuo risultato mostrando questo id nella query

  8. #8
    Certo, ma io volevo farlo senza altre tabelle! Altrimenti l'avevo già fatto (in realtà sto già pensando di farlo anche se per l'utilità che avrò di quel progressivo, quasi quasi lasciò perdere, diciamo era più una finezza). Nessuno realmente conosce il modo di farlo? avevo trovato un post dove si parlava di questo, non arrivando alla soluzione, ma purtroppo non lo trovo più!
    Prima o poi anch'io vi insegnerò qualcosa

  9. #9
    ripeto, io lo farei con una stored procedure. vedi come funzionano (quelle di MySql sono un po' diverse da quelle di SQL Server); potrebbero esserci anche dei metodi avanzati di MySql, ma non lo conosco così bene

  10. #10
    Visto che dopo averci ragionato fino ad ora provato a utilizzare le store procedure con esito negativo, ci riprovo per l'ultima volta, aiutandovi forse e dicendo che con il seguente codice:

    $quLinkdx ="SELECT ";
    $quLinkdx.="`".$tab."`.`".$campounivoco."` AS DATA, ";
    $quLinkdx.="`".$tab."`.`cartella` AS CARTELLA ";
    $quLinkdx.=" FROM `".$tab."` ORDER BY `".$tab."`.`".$campounivoco."` ASC";


    $quLinkDX1 ="SELECT ";
    $quLinkDX1.="`t1`.`DATA` AS DATA, ";
    $quLinkDX1.="CASE `t1`.`CARTELLA` WHEN '' THEN 'ALTRO' ELSE `t1`.`cartella` END AS CARTELLA, ";
    $quLinkDX1.="CASE `t1`.`CARTELLA` WHEN '' THEN 1 ELSE 2 END AS PRIMAALTRO, ";
    $quLinkDX1.="count(*) AS QUANTIUNI ";
    $quLinkDX1.="FROM (".$quLinkdx.") AS `t1` ";
    $quLinkDX1.="GROUP BY CARTELLA ";
    $quLinkDX1.="ORDER BY PRIMAALTRO ASC, DATA ASC";

    $quLinkDX ="SELECT ";
    $quLinkDX.="`t2`.DATA AS DATA, ";
    $quLinkDX.="`t2`.CARTELLA AS CARTELLA, ";
    $quLinkDX.="`t2`.PRIMAALTRO AS PRIMAALTRO, ";
    $quLinkDX.="`t2`.QUANTIUNI AS QUANTIUNI, ";
    $quLinkDX.="(SELECT Count(*) + 1 FROM (".$quLinkDX1.") t3 WHERE t3.CARTELLA<t2.CARTELLA) AS PROGRESSIVO ";
    $quLinkDX.="FROM (".$quLinkDX1.") AS `t2`";



    ottengo il risultato di seguito:

    ALTRO 1 1
    primo 2 2
    terzo 2 6
    secondo 2 5
    quarto 2 3
    quinto 2 4


    Cioè la tabella con le distinte cartelle e il progressivo per gruppo.
    Prima o poi anch'io vi insegnerò qualcosa

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.