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


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 00:11

Boa noite!

Eu tenho uma coluna "cliente_id" em uma tabela no banco de dados, que grava meus resultados assim: 1, 2, 6

Essa coluna, tem que puxar varias linhas de outra tabela, no caso a linha que tem o "id_cl" = 1 depois puxa a linha que tem o id_cl = 2 e tambem a linha do id_cl = 6

Tem como fazer isso?

Na verdade é pra listar o resultado quando o cliente id 1 é igual id_cl da outra tabela que é igual a 1, isso ja funciona

Mas preciso que sejam vários resultados

OBS.: WEB, esse ainda é um problema do meu outro post, alias outro problema rs... estou fazendo um novo topico pois não achei nada na net e isto pode ajudar outros usuários no futuro.

Obrigado
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 08:47

Você pode fazer uma consulta para obter os valores que serão usados. Em seguida, faz a consulta para listar as linhas de acordo com os valores.

// DESCOMENTE PARA FUNCIONAR //$base = mysql_query("SELECT * FROM suatabela WHERE id='1'"); //$colunas = mysql_result($base , 0, "sua_coluna"); // EXEMPLO PARA TESTE / USAR $colunas ACIMA $colunas = "1,2,3"; $exec = mysql_query("SELECT * FROM suatabela WHERE id IN($colunas)"); while($campos=mysql_fetch_array($exec)) { extract($campos); echo "$id<br />"; } 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 11:42

Web, desculpe, mas já estou desesperado rs.

Deu certo o seu código, mas quando eu adapto para o outro código, do outro post lembra? Ele fica assim, e da erro:

$exec = mysql_query("SELECT usuario.usuario_id, usuario.nome, GROUP_CONCAT(cliente.empresa_cl order by empresa_cl SEPARATOR '<br>') AS todas FROM usuario INNER JOIN cliente WHERE cliente.id_cl IN usuario.cliente_id  GROUP BY usuario.usuario_id"); while($campos=mysql_fetch_array($exec)) { extract($campos); echo "<strong>$nome</strong> <br> $todas<br /><br />"; }  

Eu peguei aquele codigo que tinhamos e mudei essa parte na segunda linha: WHERE cliente.id_cl IN usuario.cliente_id

Achei que ia funcionar, mas deu erro.

Obrigado desde já
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 12:39

Se o filtro de ids for baseado na tabela usuario, fica assim

SELECT usuario.cliente_id, usuario.nome, GROUP_CONCAT(cliente.nome_cl) AS todas FROM usuario INNER JOIN cliente ON usuario.cliente_id = cliente.user_id WHERE usuario.usuario_id IN (1,10) GROUP BY usuario.cliente_id

No IN, eu coloquei 2 ids que já existem na tabela usuario, Administrador e MANÉ

Basta seguir a dica que dei para pegar os ids e colocá-los no IN.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 12:45

Opa valeu vou testar!

No caso a dica seria a $colunas acima?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 12:48

Sim, para pegar os ids que serão listados.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 13:07

Cara, não está dando certo.

Ele funciona, só que puxa só o primeiro numero.

Ex. se eu deixar pra ser o cliente_id = 1,2,6 como pode ver o nome TESTE aqui: http://prntscr.com/4uu4u5

ele tem que puxar o id_cl = 1, depois o 2, depois o 3 e listar, como na tabela cliente aqui: http://prntscr.com/4uu5dd

Eu mudei um pouco as coisas, relacionei o usuario.cliente_id com o cliente.id_cl, pra que mais de um usuario possa ver o mesmo cliente

Meu codigo só esta puxando o primeiro id, no caso o 1, se eu mudar para 2,1,6 ele puxa o 2.

Ficou assim:

$exec = mysql_query("SELECT usuario.usuario_id, usuario.nome, GROUP_CONCAT(cliente.empresa_cl order by empresa_cl SEPARATOR '<br>') AS todas FROM usuario INNER JOIN cliente ON usuario.cliente_id = cliente.id_cl  WHERE cliente.id_cl IN (1,2,6) GROUP BY usuario.usuario_id "); while($campos=mysql_fetch_array($exec)) { extract($campos); echo "<strong>$nome</strong> <br> $todas<br /><br />"; } 

Valeu
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 13:58

Pela lógica, geralmente a coluna id "no seu caso cliente.id_cl" seria auto increment. Ai criaria outra coluna da relação entre as tabelas, que seria cliente.user_id.

Aqui eu fiz o seguinte

SELECT usuario.cliente_id, usuario.nome, GROUP_CONCAT(cliente.nome_cl) AS todas FROM usuario INNER JOIN cliente ON usuario.cliente_id = cliente.user_id WHERE usuario.cliente_id IN (1,2,6) GROUP BY usuario.cliente_id

Imagem
Como você pode perceber, use a coluna usuario.cliente_id ai relacionei com a tabela cliente pelo cliente.user_id

Imagem

O resultado foi

Administrador - Empresa 1
MANÉ - Empresa 2,Empresa 3
Gerson - Empresa 4
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 14:12

Legal, isso já estava rodando legal, no outro post.

Mas fiz umas mudanças pelo seguinte:

Por ex., preciso que o Administrador tenha empresa 2 e Empresa 3 pra ver
e o Mané tenha Empresa 2, Empresa 3 e Empresa 4

Se eu relacionar como estava, não era possivel dois usuarios verem a mesma empresa, por isso falei que o cliente_id tinha que ter 1,2,6 pra relacionar com o user_id 1, 2 e 6, separado por virgula.

Assim o administrador teria o cliente_id 1,2,6 e ele ia ler o id_cl (mudei) que é auto increment e ia listar o id_cl 1, 2 e 6

Entendeu?

Muuito obrigado pela paciencia!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 14:35

Como no caso usuario.cliente_id teria mais de um id para relacionar com outra tabela, não sei como entraria o IN para essa relação.

Nesse caso eu faria uma consulta principal, onde pegaria somente o usuário principal. No caso do Administrador, pegaria os ids de que ele tem permissão para ver, e puxaria uma sub-consulta para obter as empresas relacionadas ao id dele.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 14:43

Então... rs

Tem algum exemplo?

Posso descartar o uso do IN???
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 14:51

Testa esse exemplo

// FUNÇÃO PUXA CLIENTE function PuxaCliente($cliente) { $base = mysql_query("SELECT user_id, nome_cl FROM cliente WHERE user_id IN($cliente)"); while($campos=mysql_fetch_array($base)) { echo " {$campos['nome_cl']}<br />"; } } // CONSULTA BASE $exec = mysql_query("SELECT usuario_id, cliente_id FROM usuario WHERE usuario_id='1'"); while($campos=mysql_fetch_array($exec)) { echo PuxaCliente($campos['cliente_id']); } 

Na consulta base eu passo o usuario_id, no caso do administrador. Ai uso a coluna cliente_id, que terá os ids relacionados, 1,2,3....

Na função eu puxo as linhas da tabela cliente.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 16:50

Perfeito!!!!!

Ele só não apareceu o nome da empresa, mudei nome_cl para empresa_cl

// FUNÇÃO PUXA CLIENTE function PuxaCliente($cliente) { $base = mysql_query("SELECT id_cl, empresa_cl FROM cliente WHERE id_cl IN($cliente)"); while($campos=mysql_fetch_array($base)) { echo " {$campos['empresa_cl']}<br />"; } } // CONSULTA BASE $exec = mysql_query("SELECT usuario_id, cliente_id FROM usuario WHERE usuario_id='30'"); while($campos=mysql_fetch_array($exec)) { echo PuxaCliente($campos['cliente_id']); }  

Você toma cerveja? To te devendo uma caixa já... rsrs
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 16:57

Não tomo :x :rofl:
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 17:22

Haha!

Parceiro, adaptei tudo certo no meu código, só nao estou conseguindo arrumar o seu while com o meu.

Meu codigo da um While que lista em tabela assim:

http://prntscr.com/4ux0et

Segue codigo:

<div id="conteudo-cadastro">      <table width="100%" border="0" cellspacing="10" cellpadding="0" class="texto-preto">         <tr>           <td width="23%" height="18"><strong>Nome do usuário:</strong></td>           <td width="20%"><strong>Login:</strong></td>           <td width="16%"><strong>Empresa:</strong></td>           <td width="15%"><strong>Obra:</strong></td>         </tr>         <tr>           <td height="2" colspan="4"><hr>             <strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>             <? while($campo = mysql_fetch_array($rs)){  ?>           </b></font></strong></td>         </tr>         <tr>           <td height="31">             <strong><a href="usuario.php?usuario_id=<?= $campo["usuario_id"] ?>" class="texto-preto">             <?= $campo["nome"] ?>             <?= $campo["sobrenome_us"] ?>             </a>           </strong></td>           <td height="31">             <?= $campo["login"] ?>                                       </td>           <td height="31">                               <?                   $id_cl2 = $campo["usuario_id"];                   echo $id_cl2;                   ?>           <?          // FUNÇÃO PUXA CLIENTE function PuxaCliente($cliente) { $base = mysql_query("SELECT id_cl, empresa_cl FROM cliente WHERE id_cl IN($cliente)"); while($campos=mysql_fetch_array($base)) { echo " {$campos['empresa_cl']}<br />"; } }   // CONSULTA BASE $exec = mysql_query("SELECT usuario_id, cliente_id FROM usuario WHERE usuario_id = $id_cl2;"); while($campos=mysql_fetch_array($exec)) { echo PuxaCliente($campos['cliente_id']); }           ?>                               </td>                               <td height="31"><?                   $id_ob = $campo["obra_id"];                   ?>             <? $sql2 = mysql_query("SELECT * FROM obras where id_ob = $id_ob"); $rows2 = mysql_fetch_array($sql2)   ?>           <?= $rows2["nome_ob"] ?></td>         </tr>         <tr>           <td height="2" colspan="4"><hr></td>         </tr><?}?>         <tr>           <td height="14" colspan="4">&nbsp;</td>         </tr>         <tr>         <td colspan="4">         <a href="javascript:history.back(1);" class="bt-cadastro">Voltar</a>         </td>         </tr>       </table>     </div>

Note que no meio, coloquei do jeito fiz no arquivo teste e deu certo, na teoria está dando certo no meu codigo tmb, mas como vc pode ver na imagem, parece que ele lista com sucesso o id 1 do "administrador Sobrenome", mas quando vai para o id "8" "Rodrigo Miranda" da um pau e ele nao consegue listar, ai para o codigo.

Só falta isso pra finalizar, tenho certeza que deve ser algum detalhe.

Se puder ver pra mim agradeço mais uma vez, deve ser algum problema no while, tem dois nessa div.

Valeuuuu demaiss, obrigado por enquanto!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 17:29

Esse problema de redeclare é porque você colocou a função PuxaCliente() dentro de um while. Ela pode ficar até no topo do documento, após a chamada da conexão.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 17:36

Coloquei de vários jeitos, olha meu codigo e o que aconteceu com o layout: :(

http://prntscr.com/4ux79w

<?php // Incluindo arquivo de conexão/configuração require_once('config/conn.php'); // Instanciando novo objeto da classe Login $objLogin = new Login(); // Verificando se o usuário está logado, caso contrá será redirecionado para a página de login if (!$objLogin->verificar('index.html'))     // Finalizado o script, apenas para garantir que o usuário irá ver o conteúdo da página     exit;      // Selecionando informações do usuário $query = mysql_query("SELECT * FROM usuario WHERE usuario_id = {$objLogin->getID()}"); $usuario = mysql_fetch_object($query); ?> <? function PuxaCliente($cliente) { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>     <head>     <link href="estilo.css" rel="stylesheet" type="text/css">                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">         <title>FERRARI ENGENHARIA | NOVO CLIENTE</title>         <script type='text/javascript' src='js/jquery.js'></script>         <script type='text/javascript' src='js/jquery.form.js'></script>              </head>     <body>          <div id="corpo-bg">          <div id="tarja-topo">     <h1><span class="texto-preto-12">       <? $query = "select * from usuario"; $rs = mysql_query($query); ?>     </span>RELATÓRIO DE USUÁRIOS</h1>          <div style="float:right; width:400px; margin-top:-35px;"><table width="90%" border="0" align="right" cellpadding="10" cellspacing="10">         <tr>           <td width="86%"><h3><img src="imgs/img-user.png" width="20" height="20">&nbsp;<strong> <?php echo $usuario->nome; ?> </strong>está conectado</h3></td>           <td width="14%" align="right"><a href="sair.php" class="sair">SAIR</a></td>         </tr>         <tr>           <td colspan="2" align="center">&nbsp;</td>         </tr>       </table>             </div>     </div>         <div id="conteudo-cadastro">      <table width="100%" border="0" cellspacing="10" cellpadding="0" class="texto-preto">         <tr>           <td width="23%" height="18"><strong>Nome do usuário:</strong></td>           <td width="20%"><strong>Login:</strong></td>           <td width="16%"><strong>Empresa:</strong></td>           <td width="15%"><strong>Obra:</strong></td>         </tr>         <tr>           <td height="2" colspan="4"><hr>             <strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>             <?  while($campo = mysql_fetch_array($rs)){   ?>           </b></font></strong></td>         </tr>         <tr>           <td height="31">             <strong><a href="usuario.php?usuario_id=<?= $campo["usuario_id"] ?>" class="texto-preto">             <?= $campo["nome"] ?>             <?= $campo["sobrenome_us"] ?>             </a>           </strong></td>           <td height="31">             <?= $campo["login"] ?>                                 </td>           <td height="31">           <?           $id_cl2 = $campo["usuario_id"];           echo $id_cl2;           ?>           <?           // FUNÇÃO PUXA CLIENTE $base = mysql_query("SELECT id_cl, empresa_cl FROM cliente WHERE id_cl IN($cliente)"); while($campos=mysql_fetch_array($base)) { echo " {$campos['empresa_cl']}<br />"; } } // CONSULTA BASE $exec = mysql_query("SELECT usuario_id, cliente_id FROM usuario WHERE usuario_id = $id_cl2;"); while($campos=mysql_fetch_array($exec)) { echo PuxaCliente($campos['cliente_id']); }            ?>           </td>                                 <td height="31"><?           $id_ob = $campo["obra_id"];           ?>             <? $sql2 = mysql_query("SELECT * FROM obras where id_ob = $id_ob"); $rows2 = mysql_fetch_array($sql2) ?>           <?= $rows2["nome_ob"] ?></td>         </tr>         <tr>           <td height="2" colspan="4"><hr></td>         </tr><?}?>         <tr>           <td height="14" colspan="4">&nbsp;</td>         </tr>         <tr>         <td colspan="4">         <a href="javascript:history.back(1);" class="bt-cadastro">Voltar</a>         </td>         </tr>       </table>     </div>          <div id="tarja-base">       <img src="imgs/base-cadastro.png" width="940" height="115"> </div><br> <br>          </div>     </body> </html>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 17:43

Uma função não é só a primeira linha. Tudo isso abaixo é uma função.

// FUNÇÃO PUXA CLIENTE FUNCTION PuxaCliente($cliente) { $base = mysql_query("SELECT id_cl, empresa_cl FROM cliente WHERE id_cl IN($cliente)"); while($campos=mysql_fetch_array($base)) { echo " {$campos['empresa_cl']}<br />"; } }

Esse trecho que tem que estar fora de qualquer while.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 268
Sexo: Masculino

Relacionar tabelas separadas por delimitadores

10-10-2014 18:11

Rapaz, sabia que vc ia matar rapidinho!!!!

Agora sim, caso encerrado haha!

Muuuito obrigado!!!!!!!!

Olha como ficou:

http://prntscr.com/4uxn60

Agora só arrumar o layout e aplicar isso nas obras tmb... valeu demais, tirou um problemao da minha vida haha!

Valeu um abraço!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Relacionar tabelas separadas por delimitadores

10-10-2014 18:14

:up:
0
A melhor hospedagem para o seu site HostGator!

Quem está online

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