[Resolvido] Select de registros para 3 possíveis usuários
Pessoal, boa tarde,
Em um site, tenho um sistema de comentários, onde é permitido apenas comentar quem esteja logado no site.
Há 3 tipos de usuários: Organizadores de eventos, Usuários e Bandas.
Nos comentários serão exibidos os campos: Nome (para usuários e bandas), Empresa (para organizadores), data do comentário e foto.
Comentários
CREATE TABLE IF NOT EXISTS `eventos_coment` (
`cid` int(10) NOT NULL AUTO_INCREMENT,
`eid` int(10) NOT NULL DEFAULT '0',
`uid` smallint(5) NOT NULL,
`origem` varchar(20) COLLATE utf8_unicode_ci NOT NULL, // usuário, organizador ou banda
`de` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`email` varchar(80) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`comentario` text COLLATE utf8_unicode_ci NOT NULL,
`data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`cid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
Bandas
CREATE TABLE IF NOT EXISTS `bandas` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`data_cadastro` date NOT NULL,
`imagem` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`dir` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
Usuários
CREATE TABLE IF NOT EXISTS `usuarios_site` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`pasta` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`foto` char(11) COLLATE utf8_unicode_ci NOT NULL,
`data_cadastro` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
Organizadores
CREATE TABLE IF NOT EXISTS `organizadores` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`empresa` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`pasta` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`logo` char(11) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
MInha dificuldade é, selecionar o nome ou empresa e a pasta/foto para cada comentário, já que pode ser enviado por um usuário, organizador ou banda.
Cada um possui uma pasta diferente.
Com a SQL abaixo, eu consigo listar, porém se em alguma tabela não houver alguem cadastrado, não retorna nada.
EX: Há organizadores e usuários cadastrados, porém, nenhuma banda.
Selecionando as 4 tabelas, não retorna nada, mesmo havendo registro, pois não há bandas cadastradas.
SELECT *, org.pasta AS pastaOrg, user.pasta AS pastaUser FROM eventos_coment AS cmt, organizadores AS org, usuarios_site AS user, bandas AS bnd WHERE eid = $id || (cmt.uid = org.id && cmt.origem = 'organizador') || (cmt.uid = user.id && cmt.origem = 'usuario') ORDER BY cmt.data DESC
Já assim, exibe os comentários, pois não selecionei a tabela bandas.
SELECT *, org.pasta AS pastaOrg, user.pasta AS pastaUser FROM eventos_coment AS cmt, organizadores AS org, usuarios_site AS user WHERE eid = $id || (cmt.uid = org.id && cmt.origem = 'organizador') || (cmt.uid = user.id && cmt.origem = 'usuario') ORDER BY cmt.data DESC
Se alguém puder dar uma idéia...
Discussão (2)
Carregando comentários...