2015-05-25 12 views
5

Esistono due tabelle. La prima tabella mostra il numero di donne incinte sotto un'infermiera. Tieni presente che ci sono molte infermiere che rientrano in un unico medico. Ogni donna incinta è mappata a una singola infermiera e ogni infermiera è mappata a un solo medico. Quindi la gerarchia èFormattazione dei dati JSON mensilmente per HighCharts utilizzando MySQL

donne incinte ->Nurse ->Dottore.

Ora, ogni donna incinta ha una data di registrazione.

Secondo tavolo mi mostra la mappatura delle infermiere ai medici.

Ora, la mia domanda dovrebbe recuperare i dettagli dei medici e il conteggio delle donne incinte registrate ordine per mese (da gennaio a dicembre) per ciascun medico. Quindi il mio risultato finale dovrebbe essere nel formato JSON come applicato di seguito. Questo formato mi serve per HighCharts.

E se non ci sono stati le donne in gravidanza per un mese particolare, dovrebbe restituire 0

[{ 
     name: 'Doctor ID', 
     data: [7.0(Jan), 6.9(Feb), 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6(Dec)], 

     name: 'Doctor ID 2', 
     data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] 
    }, { 
     name: 'Doctor Id 3', 
     data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] 
    }] 

Ho provato la seguente domanda, ma non sono in grado di creare la struttura quando si tratta di mesi.

SELECT preg_reg_other.preg_id,nurse_dets.doctor_id,preg_reg_other.reg_date 
from preg_reg_other,nurse_dets 
where preg_reg_other.nurse_id = nurse_dets.nurse_id 
and preg_reg_other.reg_date is not null 
and nurse_dets.doctor_id= 1031 
order by preg_reg_other.reg_date asc 

EDIT

le due tabelle sono come segue

Tabella 1: nurse_dets

nurse_id population doctor_id nurse_name 

tabella 2: preg_reg_other

preg_id nurse_id reg_date 
+0

si può descrivere si tabelle –

+0

@Joe_Tz Controlla la sezione di modifica per i nomi delle colonne della tabella, spero che questo aiuti :) –

+0

si prega di controllare questo link http://stackoverflow.com/questions/14019964/how-to-group-by-year-and-month-in-mysql –

risposta

2

vorrei fare in questo modo:

Per ogni medico fare una query come questa:

/* get all pregrant women for a doctor, group by month and count records */ 
SELECT MONTH(p.reg_date), COUNT(*) 
FROM nurse_dets n 
INNER JOIN preg_reg_other p 
    ON n.nurse_id = p.nurse_id 
WHERE n.doctor_id = 1301 
AND n.reg_date IS NOT NULL 
GROUP BY MONTH(p.reg_date) 
ORDER BY p.reg_date ASC 

questo vi darà, per ogni mese, il conteggio delle donne in gravidanza associati al medico con id 1301

Ora, si potrebbe fare una query come questo per ogni medico e, in ogni iterazione, costruire una serie diversa per voi tracciare

alla fine si passa tutta la gamma della serie al vostro cliente e recuperare i dati per Highcharts

EDIT

Ottenere il valore 0 per i mesi in cui non ci sono donne in stato di gravidanza è un pò più complicato, come il gruppo da non restituisce alcun valore se non c'è almeno un record contare.Prova in questo modo:

SELECT months.num, COUNT(p.preg_id) 
FROM 
    (SELECT 1 AS num 
    UNION ALL SELECT 2 
    UNION ALL SELECT 3 
    UNION ALL SELECT 4 
    UNION ALL SELECT 5 
    UNION ALL SELECT 6 
    UNION ALL SELECT 7 
    UNION ALL SELECT 8 
    UNION ALL SELECT 9 
    UNION ALL SELECT 10 
    UNION ALL SELECT 11 
    UNION ALL SELECT 12) months 
LEFT JOIN preg_reg_other p 
    ON months.num = MONTH (p.reg_date) 
INNER JOIN nurse_dets n 
    ON n.nurse_id = p.nurse_id 
WHERE n.doctor_id = 1301  
GROUP BY MONTH(months.num) 
ORDER BY months.num ASC 

Prima costruiamo manualmente una tabella con i 12 mesi e "LEFT JOIN" con gli altri tavoli, quindi se non v'è alcun record, il conteggio finale dovrebbe portare a 0

I'haven't testato la query, ma spero che si ottiene l'idea

+0

La query funziona bene tranne che per le voci di un mese in cui il numero di donne in gravidanza è "0", la tabella non sta emettendo alcun valore. Puoi aiutarmi a risolvere il problema, per favore, –

+1

controlla la mia modifica qui sopra – Moppo