2015-05-25 13 views
5

Istnieją dwie tabele. Pierwszy stół pokazuje liczbę kobiet w ciąży pod jedną pielęgniarką. Należy pamiętać, że istnieje wiele pielęgniarek, którzy są pod jednym lekarzem. Każda kobieta w ciąży jest przypisana do jednej pielęgniarki i każda pielęgniarka jest przypisana do jednego lekarza. Więc hierarchia jestFormatowanie danych JSON na miesiąc dla HighCharts przy użyciu MySQL

Kobiety ciężarne ->Nurse ->Lekarz.

Teraz każda kobieta w ciąży ma datę rejestracji.

Druga tabela pokazuje mapowanie pielęgniarek do lekarzy.

Teraz moje zapytanie powinno zawierać szczegóły dotyczące lekarzy i liczby zarejestrowanych kobiet w ciąży według miesiąca (od stycznia do grudnia) dla każdego lekarza. Więc mój końcowy wynik powinien być w formacie JSON, jak zastosowano poniżej. Ten format jest mi potrzebny w przypadku HighCharts.

A jeśli nie doszło do kobiet w ciąży dla danego miesiąca, powinien powrócić 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] 
    }] 

Próbowałem następujące zapytanie, ale nie jestem w stanie tworzyć struktury, jeśli chodzi o miesiące.

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

dwie tabele są następujące

Tabela 1 nurse_dets

nurse_id population doctor_id nurse_name 

Tabela 2 preg_reg_other

preg_id nurse_id reg_date 
+0

czy możesz opisać stoły –

+0

@Joe_Tz Sprawdź nazwy edycji kolumn tabeli, mam nadzieję, że to pomoże :) –

+0

proszę sprawdzić ten link http://stackoverflow.com/questions/14019964/how-to-group-by-year-and-month-in-mysql –

Odpowiedz

2

chciałbym zrobić w ten sposób:

Dla każdego lekarza zrobić kwerendę tak:

/* 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 

to daje, za każdy miesiąc, liczba kobiet w ciąży związanymi z lekarzem o identyfikatorze 1301

teraz można zrobić kwerendę tak dla każdego lekarza, a w każdej iteracji, budować różne serie na wykresie ty

w końcu będzie można przejść całą swoją tablicę serii do klienta i pobrać dane dla highcharts

EDIT

Pierwsze wartość 0 za miesiące, w których nie ma kobiet w ciąży jest Litte bardziej skomplikowana, jako grupa przez nie zwraca żadnej wartości, jeśli nie ma przynajmniej jeden rekord liczyć.Spróbuj w ten sposób:

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 

Najpierw ręcznie zbudować tabelę z 12 miesięcy i „left join” z innych tabel, więc jeśli nie ma żadnego zapisu, ostatecznym rozrachunku powinno skutkować 0

Nie przetestowałem zapytania, ale mam nadzieję, że wpadłeś na pomysł:

+0

Kwerenda działa dobrze, z wyjątkiem tego, że w przypadku wpisów z miesiąca, w których liczba kobiet w ciąży wynosi "0", tabela nie generuje żadnej wartości. Czy możesz mi pomóc rozwiązać ten problem? –

+1

sprawdź powyższą edycję – Moppo

Powiązane problemy