Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 5
Sexo: Masculino

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 19:42

Amigos,
Boa noite.
Por gentileza, poderiam me ajudar com o uso de INNNER JOIN no PHP? Não sou programador profissional... Sou advogado e estou tentando construir um sistema de agendas para meu escritório. Já revirei a internet em busca de solução, mas não consegui aplicar no meu caso.
Basicamente, preciso aprender a utilizar o “AS” para usar no INNER JOIN com 3 tabelas, que são a seguir demonstradas:
C_AGENDA
- id
- id_escritorio_cliente
- id_advogado
- id_preposto
- datahora
C_ESCRITORIOS
- nome_escritorios
C_PESSOAS (nessa tabela estão cadastrados os advogados e prepostos...)
- id
- id
-nome
Preciso mostrar em uma tabela os seguintes dados, em ordem crescente pelo campo DATAHORA da tabela C_AGENDA:
NOME DO ESCRITÓRIO (pega o valor do campo id_escritorio_cliente da tabela agenda, traduzido pelo campo nome da tabela pessoas)
DATAHORA (simplesmente pela tabela datahora...)
ADVOGADO ( que será o nome de um dos registros da tabela C_PESSOAS, conforme o ID)
PREPOSTO (também será um dos nomes dos registros da tabela C_PESSOAS, conforme o ID)
OU seja, minha dúvida é justamente em relação ao advogado e preposto... vez que ambos são resultantes da tabela PESSOAS campo NOME... Apenas para esclarecer, todas as pessoas cadastradas podem ser advogados ou prepostos, dependendo de como for cadastrado na tabela AGENDA.
Será que alguém pode me ajudar? Obrigado.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 20:14

Um pouco complicado. A dica que posso dar, é primeiro você trabalhar somente com duas tabelas, só para entender a lógica, depois adicionar a terceira.

Dá uma olhada nesse link http://www.w3schools.com/sql/sql_join_inner.asp
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 5
Sexo: Masculino

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 20:25

WEB, eu já consegui fazer apenas com 2 tabelas, e até com 3... bastou eu colocar outro "INNER JOIN" no final da expressão... O que está me complicando é que eu não sei como diferenciar o campo NOME para ADVOGADO e PREPOSTO, pois ambos vem da mesma tabela... Meu código está mais ou menos assim:

mysql_set_charset('utf8'); $select = "SELECT * FROM c_agenda INNER JOIN c_escritorios ON c_agenda.id_escritorio_cliente = c_escritorios.id            INNER JOIN c_pessoas ON c_agenda.id_advogado = c_pessoas.id";             $result = mysql_query($select);             while ($dados=mysql_fetch_array($result)){                 echo"<tr>                         <td>".$dados['nome_escritorios']."</td>                         <td>".$dados['datahora']."</td>                         <td>".$dados['nome']."</td>                    ";                                 } 

O problema está no $dados['nome'], que msotra apenas o advogado.. como fazer para mostrar o preposto?
0
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 5
Sexo: Masculino

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 20:33

teria como eu criar um "apelido" para essa parte da consulta (INNER JOIN c_pessoas ON c_agenda.id_advogado = c_pessoas.id";), talvez colocando um 'AS" ? Assim talvez eu consiga especificar no WHILE, ao inves de "nome", por "advogado" e "preposto"... precisaria que a exibição fosse assim:
<td>".$dados['advogado']."</td>
<td>".$dados['preposto]."</td>
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 20:58

A regra para uso do AS é: "ao invés de usar SELECT *

SELECT tabela1.campo1 AS T1campo1, tabela1.campo2 AS T1campo2, .... 

0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 5
Sexo: Masculino

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 21:03

Agora eu entendi o uso do AS... Por favor... poderia me dar alguma sugestão para eu conseguir mostrar o nome do advogado e do preposto?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 22:14

Você vai ter que Adicionar ai no SELECT o campo:

SELECT C_PESSOAS.nome AS cpessoas_nome, ..... 

Sempre seguindo essa lógica para cada tabela, e fazendo a relação entre as colunas iguais.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 5
Sexo: Masculino

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

05-08-2013 22:29

Me desculpe... mas eu não entendi... Acontece o seguinte, na tabela C_AGENDA tem os campos ID_ADVOGADO e ID_PREPOSTO. Esses ID´s vem da tabela C_PESSOAS, que tem apenas os campos ID e NOME. Eu ainda não consegui entender como o AS no SELECT pode diferenciar essa relação.

Minha dúvida é: como posso fazer uma consulta como essa (INNER JOIN c_pessoas ON c_agenda.id_advogado = c_pessoas.id), também para c_agenda.id_preposto = c_pessoas.id... ? Isso porque, quando eu dou o ECHO, eu uso (não sei se acertadamente) o nome da coluna (NOME) para exibir o dado, tal como eu fiz para mostrar o nome do advogado...

Mais uma vez peço desculpas se estou sendo insistente.... Abraço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

06-08-2013 09:46

Usando o tabela.coluna AS novonome você identifica na query que valor será pego de que tabela específica, para usar no while "AS novonome".

Para criar o INNER JOIN usando 3 tabelas, basta seguir essa lógica do link que indiquei

SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name INNER JOIN table3 ON table1.column_name=table3.column_name;

Agora basta fazer a relação correta entre as colunas das tabelas.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

INNER JOIN COM 3 TABELAS - 2 CAMPOS DE ORIGEM --> 1 CAMPO

07-08-2013 16:23

Fiz um teste aqui usando 3 tabelas do fórum phpbb3 e deu certo, segue o exemplo

SELECT phpbb_topics.*, phpbb_forums.*, phpbb_posts.* FROM phpbb_topics   INNER JOIN phpbb_forums ON phpbb_forums.forum_id=phpbb_topics.forum_id   INNER JOIN phpbb_posts ON phpbb_posts.topic_id=phpbb_topics.topic_id     GROUP BY phpbb_topics.topic_id

0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado