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

    come SUM ma per le stringhe

    Uso php e mysql

    Vorrei creare una query che mi concateni una serie di valori di un campo dei record filtrati di una tabella, es:

    Tabella Autorizzazioni
    id-numero_aut-data_aut
    01 0000000010 05/03/13
    02 0000000012 19/03/13
    03 0000000018 06/04/13
    04 0000000027 08/05/13
    05 0000000034 10/06/13

    Tabella Specifiche
    id-id_aut-contratto_di_riferimento-importo
    01 02 AAAAAAAAAAAAAAAAAAAAAAAA 10.00
    02 04 BBBBBBBBBBBBBBBBBBBBBBBB 15.00
    03 03 CCCCCCCCCCCCCCCCCCCCCCCC 8.00
    04 02 CCCCCCCCCCCCCCCCCCCCCCCC 11.00
    05 03 AAAAAAAAAAAAAAAAAAAAAAAA 4.50

    Le due tabelle sono in relazione "1 a molti" tramite i campi Autorizzazioni.id - Specifiche.id_aut

    Compongo la seguente query in base alla mie esigenze lasciando "____________________________" laddove non riesco a completare:

    SELECT
    Autorizzazioni.id AS AUTORIZZAZIONI_ID,
    Autorizzazioni.numero_aut AS AUTORIZZAZIONI_NUMERO_AUT,
    Autorizzazioni.data_aut AS AUTORIZZAZIONI_DATA_AUT,
    Specifiche.id AS SPECIFICHE_ID,
    Specifiche.id_aut AS SPECIFICHE_ID_AUT,
    Specifiche.contratto_di_riferimento AS SPECIFICHE_CONTRATTO_DI_RIFERIMENTO,
    Specifiche.importo AS SPECIFICHE_IMPORTO,
    "____________________________" AS TESTO_DESIDERATO
    FROM Autorizzazioni, Specifiche
    WHERE (Autorizzazioni.id=Specifiche.id_aut)&&
    (Specifiche.contratto_di_riferimento='CCCCCCCCCCCC CCCCCCCCCCCC')

    nella suddetta query non riesco a creare l'istruzione che definisce il TESTO DESIDERATO in modo che, dato un contratto in entrata (nell'esempio 'CCCCCCCCCCCCCCCCCCCCCCCC') si vada a pescare in "Specifiche" tutti i record di quel contratto e vada a vedere le autorizzazioni corrispondenti restituendo nella fattispecie la stringa "autorizzazione 0000000018 del 06/04/13, autorizzazione 0000000012 del 19/03/13"

    Per intendersi e sempre se non èrro, se avessi dovuto sommare tutte le valute di un campo avrei utilizzato la funzione SUM, ma qui devo concatenare le stringhe.

    Qui mi sà che ci voglia un
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    In pratica togliendo la parte che non riesco a ricostruire la query soprascritta mi restituisce, sempre per rifarmi all'esempio:

    SPECIFICHE_CONTRATTO_DI_RIFERIMENTO - SPECIFICHE_ID - SPECIFICHE_ID_AUT - AUTORIZZAZIONI_NUMERO_AUT - AUTORIZZAZIONI_DATA_AUT

    CCCCCCCCCCCCCCCCCCCCCCCC 03 03 0000000018 06/04/13
    CCCCCCCCCCCCCCCCCCCCCCCC 04 02 0000000012 19/03/13

    Vorrei che diventasse semplicemente

    SPECIFICHE_CONTRATTO_DI_RIFERIMENTO - TESTO_DESIDERATO

    CCCCCCCCCCCCCCCCCCCCCCCC Autorizzazione 0000000018 del 06/04/13, Autorizzazione 0000000012 del 19/03/13

    ma necessito di farlo ancora a livello della query
    Prima o poi anch'io vi insegnerò qualcosa

  3. #3

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Giusto. GROUP_CONCAT è quel che fà al caso mio.
    Non l'ho ancora applicato alla fattispecie ma spero proprio che non mi risentirete per questo quesito (spero).

    Comunque ho trovato in rete anche questo esempio che mi ha aiutato molto:

    http://www.clorophilla.net/blog/?p=66
    Prima o poi anch'io vi insegnerò qualcosa

  5. #5
    Non riuscendo ricomincio da capo e con tabelle molto più vicine alle mie esigenze. Non vi spaventate non sarà difficile capire che cosa cerco.

    Uso php con Mysql.

    Ho le tre tabelle che potete vedere
    http://www.aringhieri.it/immagini_forum/3tabelle.jpg

    Autorizzazioni è collegato a Specifiche con relazione 1 a molti tramite i campi Autorizzazioni.id-Specifiche.id_aut
    Contratti è collegato a Specifiche con relazione 1 a molti tramite i campi Contratti.numcontr-Specifiche.contratto

    Potete riprodurre le tabelle con i dati in esempio inserendo questo codice Sql in Mysql:

    CREATE TABLE IF NOT EXISTS `Contratti` (`id` mediumint(8) unsigned NOT NULL auto_increment,`numcontr` varchar(100) NOT NULL default '',`data` int(10) NOT NULL default '0',`tipologia` varchar(100) NOT NULL default '', PRIMARY KEY (`id`));
    CREATE TABLE IF NOT EXISTS `Autorizzazioni` (`id` mediumint(8) unsigned NOT NULL auto_increment,`autorizzazione` varchar(100) NOT NULL default '',`data` int(10) NOT NULL default '0', PRIMARY KEY (`id`));
    CREATE TABLE IF NOT EXISTS `Specifiche` (`id` mediumint(8) unsigned NOT NULL auto_increment,`id_aut` varchar(100) NOT NULL default '',`contratto` varchar(100) NOT NULL default '',`compenso` float(4,2) NOT NULL default '0.00',`storno` float(4,2) NOT NULL default '0.00', PRIMARY KEY (`id`));

    INSERT INTO `Contratti` (`id`,`numcontr`,`data`,`tipologia`)VALUES(NULL,'1 0000000','1367359200','UNO'),(NULL,'20000000','136 7877600','DUE'),(NULL,'30000000','1367877600','TRE '),(NULL,'40000000','1368828000','QUATTRO');
    INSERT INTO `Autorizzazioni` (`id`,`autorizzazione`,`data`)VALUES(NULL,'111111' ,'1370815200'),(NULL,'222222','1371247200'),(NULL, '333333','1371679200'),(NULL,'444444','1372284000' );
    INSERT INTO `Specifiche` (`id`,`id_aut`,`contratto`,`compenso`,`storno`)VAL UES(NULL,'2','30000000','10.00','0.00'),(NULL,'1', '40000000','10.00','0.00'),(NULL,'2','40000000','1 5.00','0.00'),(NULL,'4','40000000','12.00','0.00') ,(NULL,'3','40000000','15.00','0.00'),(NULL,'2','4 0000000','15.00','0.00'),(NULL,'3','30000000','12. 00','0.00'),(NULL,'2','10000000','0.00','3.00'),(N ULL,'4','30000000','10.00','0.00'),(NULL,'4','4000 0000','0.00','10.00'),(NULL,'3','40000000','15.00' ,'0.00'),(NULL,'3','30000000','10.00','0.00'),(NUL L,'1','40000000','0.00','10.00');

    Per semplificare ho creato la tabella contratti così come la vedete, ma in realtà viene fuori dell'elaborazione di dati con precedenti query (che non ritengo importante riportare), ma tenete conto che proprio per questo io riesco a visualizzare la tabella solo con l'istruzione sotto riportata:

    $query_b="
    SELECT
    `T3`.t2_id AS id,
    `T3`.t2_numcontr AS num_contr,
    `T3`.t2 AS data,
    `T3`.t2_tipologia AS tipologia
    FROM (".$query_a.") AS T3
    ";

    Mi stò scervellando da qualche giorno per creare, e credo che GROUP_CONTACT sia l'istruzione giusta, la tabella seguente:

    http://www.aringhieri.it/immagini_forum/VOLUTA.JPG


    Le ho provate di tutte, ma ormai sconsolato, ho perso un ora per creare questo post più vicino possibile a quello di cui necessito, per vedere se qualcuno mi può aiutare.
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    ho importato le tre tabelle cosa vuoi ottenere dalla query?


    Ho cercato di capire che resultset volevi ottenere, è per caso questo:

    codice:
    SELECT 
           Specifiche.contratto
    ,GROUP_CONCAT(CONCAT(CONCAT(CONCAT('AUTORIZZAZIONE NUM ', Autorizzazioni.autorizzazione)), ' DEL '), Autorizzazioni.DATA)  AS TESTO_DESIDERATO 
    
    FROM Autorizzazioni, Specifiche 
    WHERE (Autorizzazioni.id=Specifiche.id_aut) AND
    (Specifiche.contratto='40000000')
    GROUP BY specifiche.contratto
    se la risposta ti è stata utile lasciamo un mi piace su FB
    https://www.facebook.com/blogprogrammatori

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.