2013-03-19 4 views
0

Не уверен, что моя логика работает на этом. У меня есть таблица Documents, которая имеет уникальный идентификатор для каждого элемента и имя документа. Затем у меня есть другая таблица DocVotes, которая хранит голоса пользователей по документу (один голос за запись). Поле Vote является BOOL (1 для YES и 0 для NO).MySQL JOIN запрос с непредвиденными результатами COUNT

Я пытаюсь проверить, если конкретный пользователь MemberID проголосовал на документ, прежде чем, очевидно, вы не можете голосовать на свой собственный документ (Проверено исключением AuthorID)

Вот запрос я пытаюсь

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d 
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID 
    AND dv.MemberID=32 
WHERE d.Status = 'Proposed' 
    AND d.AuthorID<>32 

то, что я думаю, что он должен делать: Получить ID, Name и подсчитать число голосов, поданных MemberID (32 в данном случае) затем просто проверить количество и если счетчик равен 0, то это будет означать, что пользователь еще не проголосовал, если 1 т (они могут голосовать только один раз).

Тем не менее, я возвращаю счет 6, но только 1 голос был сделан этим пользователем над этим конкретным документом. Таким образом, очевидно, что это больше, чем просто запись ... (я только получаю 1 строку назад)

Мысли?

+4

Вам может понадобиться 1) скрипку, чтобы мы могли проверить 2) 'GROUP BY' – fedorqui

+0

Я на самом деле просто попробовал это, и я вернул 6 строк с ожидаемыми результатами. Я оставил «GROUP BY d.ID», и теперь он отлично работает. Это всегда очевидно, что мы получаем ... Спасибо. – SnareChops

+0

Хорошо! Я ответил, чтобы ответить на вопрос. – fedorqui

ответ

1

Просто к сведению, что было говорил о комментариях:

Попробуйте использовать GROUP BY d.ID:

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d 
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID 
    AND dv.MemberID=32 
WHERE d.Status = 'Proposed' 
    AND d.AuthorID<>32 
GROUP BY 
    d.ID 
Смежные вопросы