Query Sql Consiglio ?

Ciao, qualche esperto sql nei paraggi :) ?




SELECT 

    pz.cognome AS Cognome,

    (select s.presa_in_carico_data from tbl_progetto s where s.is_progetto = 1 AND                    

        s.cc_id_fk = cc.cc_id) as Start,

    (select e.presa_in_carico_data from tbl_progetto e where e.is_dimissione = 1 AND 

        e.cc_id_fk = cc.cc_id) as End, 

    trf.trf_note AS "Tipo trattam.",

    trf.trf_prezzou as Retta,

    COUNT(tra.trt_id) AS "N.GG." /*<-- conteggio (numero giorni) */

FROM

    tbl_progetto p 

    JOIN tbl_cartellaclinica cc ON cc.cc_id = p.cc_id_fk

    JOIN tbl_paziente pz ON pz.id = cc.pz_fk_id

    JOIN tbl_distretti_sanitari di ON pz.distretto_appartenenza = di.dss_id

    JOIN tbl_trattamenti tra ON p.pr_id = tra.pr_fk_id    

WHERE

    tra.trt_data BETWEEN '2012-08-01' AND '2012-08-31' AND

    p.pr_faseriab_fk = 4

GROUP BY cc_id

…oltre il "COUNT(tra.trt_id) AS "N.GG." /*<-- conteggio (numero giorni) */"

vorrei ricavare un secondo conteggio ma calcolato sul range di date

DAL (presa_in_carico_data where is_progetto=1) A (l’alias “End”)

tnx :)

Io farei una query separata.

Per avere la disponibilita’ nella query dei valori start e end li devi estrarre con una join e non con una subquery.




SELECT 

    pz.cognome AS Cognome,s.presa_in_carico_data as Start, e.presa_in_carico_data as End, 

    trf.trf_note AS "Tipo trattam.",

    trf.trf_prezzou as Retta,

    COUNT(tra.trt_id) AS "N.GG." /*<-- conteggio (numero giorni) */

    COUNT(tra2.trt_id) AS "N.GG." /*<-- conteggio (numero giorni tra le date) */

FROM

    tbl_progetto p 

    JOIN tbl_progetto s where s.is_progetto = 1 AND s.cc_id_fk = cc.cc_id

    JOIN tbl_progetto e where s.is_dimissione = 1 AND s.cc_id_fk = cc.cc_id

    JOIN tbl_cartellaclinica cc ON cc.cc_id = p.cc_id_fk

    JOIN tbl_paziente pz ON pz.id = cc.pz_fk_id

    JOIN tbl_distretti_sanitari di ON pz.distretto_appartenenza = di.dss_id

    JOIN tbl_trattamenti tra ON p.pr_id = tra.pr_fk_id    

    JOIN tbl_trattamenti tra2 ON (p.pr_id = tra.pr_fk_id)


WHERE

    tra.trt_data BETWEEN '2012-08-01' AND '2012-08-31' AND

        p.pr_faseriab_fk = 4

    tra2.trt_data BETWEEN s.presa_in_carico_data AND e.presa_in_carico_data AND

    p.pr_faseriab_fk = 4

GROUP BY cc_id



Questo approccio "eroico’ alle query secondo me e’ da sconsigliare, ti conviene fare delle relationship tra i modelli e poi usare il parametro with del CDbCriteria per fare la query assieme.

Questa stessa query si potrebbe fare usando i modelli e le relations, basta aver fede e pazienza, le relations le puoi riutilizzare, l’sql “epico” no

Ciao @zaccaria, grazie x il reply, purtroppo non credo potrò fare uso di + query, la mia situazione è questa, dovrei usare i dati ricavati per esportarli in formato excel, l’estensione, tra i suoi parametri, si aspetta in ingresso un oggetto dataPorvider (io uso l’sqlDataProvider) con query annessa… non saprei come uniformare + di una query in un unico oggetto dataProvider … :mellow:

thanks

Ti consiglio di usare un’altra libreri per excel o di aprire quella che usi per estenderla.

Quando mi sono trovato io a fare le esportazioni scrivevo delle funzioni di livello piu’ basso indicando in quali celle mettere cosa, in questa maniera puoi gestire la cosa piu’ precisamente:


$this->setCell('A', $i, $model->paziente->cognome)

In sostanza, invece di usare una libreria excel elementare ed impazzire con la query, meglio usare una libreria piu’ completa e usare i model di yii.

Fai comunque attenzione agli export, se ti trovi grandi quantita’ di dati non ti basta la memoria, devi farlo in csv.

Devo prendere più dimestichezza con le relations … le uso per relazioni semplici ma per quelle complesse :( non ho voluto azzardare … poi la fretta si sà è cattiva consigliera … :)

Grazie però provo subito la query e vi aggiorno :D

N.B.

…posso pubblicare un altro post x un altra query (complessa x me) ?