iNeo 0 Denunciar post Postado Janeiro 11, 2010 Olá pessoal, estou com uma enorme dúvida sobre o funcionamento de uma consulta. Estava estudando e me deparei com uma query que não consigo entender de forma alguma... Eis a maldita SQL: $query = "select p.categoria, p.descricao from pagina p, escritor_permissao ep, materia m where p.categoria = ep.categoria and ep.escritor = m.escritor and m.id ='".$_GET['id_materia']."'"; Não consigo entender o porquê dessa consulta retornar todas as categorias que um escritor tem permissão para escrever matérias ao invés de apenas única categoria imposta pelo id passado pelo GET :( * O certo é retornar todas as categorias que o escritor tem permissão para publicar matérias, isso é exatamente o que a consulta faz e é isso que não estou entendo :\ As tabelas categoria, materias, escritor_permissao estão listadas abaixo: CREATE table pagina ( categoria varchar(16) PRIMARY KEY, descricao text ); CREATE table escritor_permissao ( escritor varchar(16) NOT NULL, categoria varchar(16) NOT NULL ); CREATE table materia ( id int PRIMARY KEY auto_increment, escritor varchar(16) NOT NULL, categoria varchar(16) NOT NULL, manchete text, texto text, imagem text, criada int, modificada int, publicada int ); Se precisarem de mais informação para poder me ajudar é so falar! Até! Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Janeiro 11, 2010 Qual o banco de dados? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
iNeo 0 Denunciar post Postado Janeiro 11, 2010 Não sei se entendi a pergunta. Utilizo MySQL. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Janeiro 11, 2010 Então, como a sua dúvida é sobre como funciona a consulta, vou mover para o fórum correto. Tópico Movido PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif MySQL Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Janeiro 11, 2010 Olha, acredito que "p" seja a tabela "pagina", m seja a tabela "materia" e "ep" seja a tabela escritor_permissao... simplesmente essa query pega valores de várias tabelas.. $query = "SELECT pagina.categoria, pagina.descricao FROM pagina, escritor_permissao, materia WHERE pagina.categoria = escritor_permissao.categoria AND escritor_permissao.escritor = materia.escritor AND materia.id ='".$_GET['id_materia']."'"; Explicando do SELECT até FROM.. pagina.categoria => Seleciona a coluna categoria da tabela pagina. pagina.descricao => Seleciona a coluna descricao da taabela pagina. FROM até WHERE pagina => é a tabela que irá pegar os valores escolhidos escritor_permissao => é a tabela que irá pegar os valores escolhidos materia => é a tabela que irá pegar os valores escolhidos WHERE até o fim pagina.categoria = escritor_permissao.categoria => Pega a coluna categoria da tabela pagina e verifica se a coluna categoria da tabela escritor_permissao é são iguais. escritor_permissao.escritor = materia.escritor => Faz a mesma do função do anterior materia.id = '".$_GET['id_materia']."' Compartilhar este post Link para o post Compartilhar em outros sites
iNeo 0 Denunciar post Postado Janeiro 12, 2010 Good obrigado pela ajuda, mas o que você explicou eu já tinha compreendido... Eu quero saber por que a consulta retorna todas as matérias que um escritor possui permissão para escrever, ao invés de uma única matéria identificada pelo id :\ Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Janeiro 16, 2010 Nao entendi qual a sua dificudade mas vou tentar explicar todo id traz um escritor e uma categoria apenas POREM.... cada escritor pode escrerver em multiplas categorias ENTAO.... quando você junta materias com escritores, o join da produto cartesiano e você ve todas as categorias do escritor em questao o q eh produto cartesiano? imaginemos (taba) ABC|XYZ 1|A 2|B 3|C 4|D 5|E 6|F (tabb) NUMERO|LETRA 1|k 1|l 1|m 2|n 2|o 4|p 6|q Select * from taba,tabb where taba.abc = tabb.numero ABC|XYZ|NUMERO|LETRA 1|A|1|k 1|A|1|l 1|A|1|m 2|B|2|n 2|B|2|o 4|D|4|p 6|F|6|q capiche? Compartilhar este post Link para o post Compartilhar em outros sites