Eu tenho as 3 tabelas a seguir para um pequeno recurso de votação/enquete:
CREATE TABLE IF NOT EXISTS `options` (
`option_id` tinyint(4) unsigned NOT NULL,
`poll_id` mediumint(8) unsigned NOT NULL,
`option` tinytext NOT NULL,
UNIQUE KEY `option_id_poll_id` (`option_id`,`poll_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Storing poll options/choices';
CREATE TABLE IF NOT EXISTS `questions` (
`poll_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`deleted` bit(1) NOT NULL DEFAULT b'0',
`question` tinytext NOT NULL,
`nick` varchar(32) NOT NULL,
`dated` datetime NOT NULL,
PRIMARY KEY (`poll_id`),
KEY `deleted` (`deleted`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Table to store poll questions/titles';
CREATE TABLE IF NOT EXISTS `votes` (
`poll_id` mediumint(8) unsigned NOT NULL,
`option_id` tinyint(4) unsigned NOT NULL,
`nick` varchar(32) NOT NULL,
`dated` datetime NOT NULL,
UNIQUE KEY `poll_id_nick` (`poll_id`,`nick`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
e estou buscando os resultados de um certo poll_id
(representado %d
abaixo) usando a seguinte consulta:
SELECT
o.option_id AS option_id,
o.`option` AS `option`,
COUNT(v.nick) AS total
FROM options o
LEFT JOIN votes v
USING (poll_id)
WHERE o.poll_id = %d
AND v.option_id = o.option_id
ORDER BY total DESC, o.option_id ASC
Uma amostra pode ser vista em sqlfiddle . Eu gostaria de recuperar todas as opções/escolhas disponíveis para qualquer um poll_id
e exibir o COUNT
as 0
, ou NULL
; se nenhum usuário escolheu essa opção específica. Assim, para o exemplo do violino, o resultado seria:
option_id | option | total
1 | A | 3
2 | B | 1
3 | C | 0