2013-01-06 14 views
7

Mam 2 tabele (członkowie, duty_sched) Chcę móc policzyć, ile razy każdy członek pojawi się w tabeli duty_sched. To co mam po kilku tygodniach poszukującychLicznik sprzężenia zwrotnego MySQL Nie działa

SELECT 
members.fname, 
members.lname, 
(SELECT COUNT(duty_sched.id) FROM duty_sched 
WHERE 'duty_sched.mbr_id' = 'members.mbr_id') AS shifts 

FROM members 
ORDER BY members.lname, members.fname 

Sygnał wyjściowy Dostaję to same zera, co chciałbym to pokazać mi to:

Nazwa przesuwa Bob Smith 4 Jane Johnson 2

Każda pomoc, jaką mogę uzyskać, zostanie bardzo doceniona.

+0

Cześć, próbowałem twojego zapytania na tabliczce zręcznościowej, którą mam. Twoja struktura jest właściwa. spróbuj policzyć (*) i sprawdzić, gdzie się znajdujesz. –

Odpowiedz

7

Usuń pojedyncze cytaty: WHERE duty_sched.mbr_id = members.mbr_id)

Można również napisać zapytanie o LEFT JOIN:

SELECT 
    m.fname, 
    m.lname, 
    COUNT(d.id) AS shifts 
FROM members AS m 
    LEFT JOIN duty_sched AS d 
    ON d.mbr_id = m.mbr_id 
GROUP BY 
    m.mbr_id      -- the Primary Key of `members` 
ORDER BY 
    m.lname, m.fname ; 
+0

mbr_id to VARCHAR składający się z różnych informacji o kolumnach, czy to robi różnicę? –

+0

Edytuj, twoje pytanie, dodaj wyniki "SHOW CREATE TABLE members" i rzeczywistych danych, kilka wierszy tabeli. –

+0

Dodałem kolumnę INT do obu tabel w celach identyfikacyjnych i po tym, jak dołączyłem do dwóch kolumn INT, działało to doskonale. Dzięki za wszystko, co zrobiłeś. –

0

Można spróbować coś takiego

SELECT 
members.fname, 
members.lname, 
count(*) FROM duty_sched JOIN members 
WHERE duty_sched.mbr_id = members.mbr_id 
Group by duty_sched.mbr_id 
ORDER BY members.lname, members.fname 
0

Spróbuj:

SELECT m.fname, m.lname, IFNULL(A.shifts, 0) shifts 
FROM members m 
LEFT JOIN (SELECT mbr_id, COUNT(id) shifts 
      FROM duty_sched GROUP BY mbr_id) A ON m.mbr_id = A.mbr_id 
ORDER BY m.lname, m.fname; 
Powiązane problemy