Eu sei que você postou um pouco da regra de negocio ali em cima mas, tem como detalhar melhor ? tipo postando o nome e os campos das tabelas reais ?
edit: acho que entendi, a regra seria mais ou menos assim:
vc tem por exemplo uma tabela de pessoa, e uma tabela de tipos de consulta, e numa terceira tabela voce guardaria uma consulta marcada por uma pessoa, e o status daquela consulta ?
[]'s
edit2: se for a regra acima, você com duas tabelas já da pra fazer, segue dump do mysql:
--
-- Estrutura da tabela `consultas`
--
CREATE TABLE IF NOT EXISTS `consultas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Extraindo dados da tabela `consultas` <----- ESSA TABELA AQUI NÃO PRECISA.
--
INSERT INTO `consultas` (`id`, `nome`) VALUES
(1, 'Pronto Socorro'),
(2, 'Enferemaria');
-- --------------------------------------------------------
--
-- Estrutura da tabela `consultas_marcadas`
--
CREATE TABLE IF NOT EXISTS `consultas_marcadas` (
`id_pessoa` int(11) NOT NULL,
`id_consulta` int(11) NOT NULL,
`status` tinyint(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Extraindo dados da tabela `consultas_marcadas`
--
INSERT INTO `consultas_marcadas` (`id_pessoa`, `id_consulta`, `status`) VALUES
(1, 2, NULL),
(2, 2, 1),
(3, 2, NULL),
(2, 2, NULL),
(4, 1, 1),
(2, 1, NULL);
-- --------------------------------------------------------
--
-- Estrutura da tabela `pessoas`
--
CREATE TABLE IF NOT EXISTS `pessoas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Extraindo dados da tabela `pessoas`
--
INSERT INTO `pessoas` (`id`, `nome`) VALUES
(1, 'João'),
(2, 'Maria'),
(3, 'Juckinha'),
(4, 'Zezé'),
(5, 'Wryel');
SELECT que mostra a quantidade de consultas das pessoas:
SELECT pessoas.id, pessoas.nome, COUNT(consultas_marcadas.status) AS ConsultasAtivas, COUNT(consultas_marcadas.id_pessoa) TotalConsultas FROM pessoas
LEFT JOIN consultas_marcadas ON pessoas.id = consultas_marcadas.id_pessoa
GROUP BY pessoas.id
SELECT que mostra apenas pessoas com numero de quantidade de consultas iguais:
SELECT pessoas.id, pessoas.nome, COUNT(consultas_marcadas.status) AS ConsultasAtivas, COUNT(consultas_marcadas.id_pessoa) TotalConsultas FROM pessoas
LEFT JOIN consultas_marcadas ON pessoas.id = consultas_marcadas.id_pessoa
GROUP BY pessoas.id
HAVING ConsultasAtivas = TotalConsultas
lembrando que COUNT() quanto passa em um campo nulo, ele não conta(?) desde que não seja em um GROUP BY
só adaptar agora conforme sua regra de negócio 