Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

iNeo

Como essa consulta funciona?

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.