Ir para conteúdo

POWERED BY:

Arquivado

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

Warcros

Selecionar mais de uma tabela SQL

Recommended Posts

Olá!! Estou criando um sistema no qual preciso selecionar dados de duas tabelas ao mesmo tempo e exibi-los juntos, em uma única lista.

 

Basicamente desta forma:

$sql = mysql_query("SELECT * FROM tabela1,tabela2 WHERE dono = '$id'  ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
  </tr>

<?php
}
?>

Ambas as tabelas possuem os campos que preciso consultar, no caso "status", "data" e "tipo".

Obs: O Exemplo que dei acima: "SELECT * FROM tabela1,tabela2" não funciona...

 

 

Caso alguém tenha uma sugestão fico muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

procure por inner join, a sintaxe seria assim:

 

 

SELECT t1.c, t1c, t2.status, t2.id FROM tabela1 AS t1
INNER JOIN tabela2 AS t2 ON t1.id = t2.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

inner join é a solução.

 

mas para o seu caso eu faria assim: (Não sei se geral vai recomendar o que farei)

 

 

<?php

$sql = mysql_query("
SELECT tabela1.*, tabela2.* 
FROM tabela1,tabela2 
WHERE dono = '$id'  
ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
  </tr>

<?php
}
?>
Mas para se consultar a informação de duas tabelas, você precisa de um vinculo entre elas, tendo este vinculo voce acrescenta ele no where como no exemplo abaixo:
<?php

$sql = mysql_query("
SELECT tabela1.*, tabela2.* 
FROM tabela1,tabela2 
WHERE dono = '$id' 
AND tabela1.campo = tabela2.campo 
ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
  </tr>

<?php
}
?>

Mas precisar de mais ajuda, poste a tabela do banco ai tento ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou realizando vários testes tanto com o inner join quanto sem, porém, até o momento não tive resultados, não sei se o fato de estar pegando os valores da maneira abaixo está comprometendo o processo:

while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Estou realizando vários testes tanto com o inner join quanto sem, porém, até o momento não tive resultados, não sei se o fato de estar pegando os valores da maneira abaixo está comprometendo o processo:

while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];

testa a consulta primeiro diretamente no banco pelo phpmyAdmin , linha de comando ou workbench, quando ela funcionar vc joga no php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tabelas:

CREATE TABLE tabela1
( id   int(11) NOT NULL auto_increment,
 	PRIMARY KEY  (`id`),
	status varchar(50),
	data varchar(50),
	tipo varchar(50),
	codtrans varchar(100),
        dono varchar(50)
) ENGINE=MyISAM DEFAULT CHARSET=utf8  COLLATE=utf8_general_ci;

CREATE TABLE tabela2
( id   int(11) NOT NULL auto_increment,
 	PRIMARY KEY  (`id`),
	status varchar(50),
	data varchar(50),
	tipo varchar(50),
	email varchar(100),
        dono varchar(50)
) ENGINE=MyISAM DEFAULT CHARSET=utf8  COLLATE=utf8_general_ci;

 

 

Código:

<table align="center" width="500" border="1" cellspacing="0" cellpadding="5" style="font:Arial, Helvetica, sans-serif; color:#666666; size:16px;">
  <tr>
    <td align="center"><strong>Tipo</strong></td>
    <td align="center"><strong>Data/Hora</strong></td>
    <td align="center"><strong>Status</strong></td>
    <td align="center"><strong>Ação</strong></td>
      </tr>
<?php
$sql = mysql_query("SELECT * FROM tabela1,tabela2 WHERE dono = '$id'  ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status'];
	$data = $linha['data'];
	$tipo = $linha['tipo'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
    <td align="center">Ver detalhes</td>
  </tr>
  
  
  <?php
  }
  ?>
  
</table><br /><br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

resumindo, o dono é o que voce tem de incomum nas duas tabelas. Mas o por que de duas tabelas iguais?

 

não entendi isso, mas com base no que você passou posso elaborar o seguinte:

<table align="center" width="500" border="1" cellspacing="0" cellpadding="5" style="font:Arial, Helvetica, sans-serif; color:#666666; size:16px;">
  <tr>
    <td align="center"><strong>Tipo</strong></td>
    <td align="center"><strong>Data/Hora</strong></td>
    <td align="center"><strong>Status</strong></td>
    <td align="center"><strong>Ação</strong></td>
      </tr>
<?php
$sql = mysql_query("SELECT * FROM tabela1.status as status1, tabela1.data as data1. tabela1.tipo as tipo1, tabela2.status as status2, tabela2.data as data2. tabela2.tipo as tipo2 WHERE tabela1.dono = '$id' and tabela2.dono='$id' ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status1'];
	$data = $linha['data1'];
	$tipo = $linha['tipo1'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
    <td align="center">Ver detalhes</td>
  </tr>
  
  
  <?php
  }
  ?>
  
</table><br /><br />

bom, se quiser ver as informações da tabela dois é so colocar o dois, agora se quiser ver os dois ao mesmo tempo, basta criar outras variaveis para receber as informações da tabela 2.

Resolveu alguma coisa para ti? Lembrando que não entendi seu objetivo com duas tabelas que tem a mesma informação

Compartilhar este post


Link para o post
Compartilhar em outros sites

resumindo, o dono é o que voce tem de incomum nas duas tabelas. Mas o por que de duas tabelas iguais?

 

não entendi isso, mas com base no que você passou posso elaborar o seguinte:

<table align="center" width="500" border="1" cellspacing="0" cellpadding="5" style="font:Arial, Helvetica, sans-serif; color:#666666; size:16px;">
  <tr>
    <td align="center"><strong>Tipo</strong></td>
    <td align="center"><strong>Data/Hora</strong></td>
    <td align="center"><strong>Status</strong></td>
    <td align="center"><strong>Ação</strong></td>
      </tr>
<?php
$sql = mysql_query("SELECT * FROM tabela1.status as status1, tabela1.data as data1. tabela1.tipo as tipo1, tabela2.status as status2, tabela2.data as data2. tabela2.tipo as tipo2 WHERE tabela1.dono = '$id' and tabela2.dono='$id' ORDER BY id DESC");
while($linha = mysql_fetch_array($sql)) {
	$status = $linha['status1'];
	$data = $linha['data1'];
	$tipo = $linha['tipo1'];
	?>
  <tr>
    <td align="center"><?php echo $tipo; ?></td>
    <td align="center"><?php echo $data; ?></td>
    <td align="center"><?php echo $status; ?></td>
    <td align="center">Ver detalhes</td>
  </tr>
  
  
  <?php
  }
  ?>
  
</table><br /><br />

bom, se quiser ver as informações da tabela dois é so colocar o dois, agora se quiser ver os dois ao mesmo tempo, basta criar outras variaveis para receber as informações da tabela 2.

 

Resolveu alguma coisa para ti? Lembrando que não entendi seu objetivo com duas tabelas que tem a mesma informação

 

Olá DunkMask, o código acima não resolveu, não houve retorno do banco, mas ainda sim agradeço.

 

O porque de usar duas tabelas é que uma delas SÓ é editada por um sistema de pagamento, já a outra é editada por meio de inclusão de dados por parte de quem acessa o site. O objetivo é não misturar as inclusões. Este checagem acima faz uma relação das inclusões do sistema de pagamento com as solicitações dos clientes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro esta no where.

 

como eu disse, tem que ter um campo que faça vinculo com as duas tabelas, testa isso no where

WHERE tabela1.dono='$id' and tabela1.dono = tabela2.dono

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uffaa, muito sofrimento mas consegui, utilizei o UNION para unir os dados da ambas as tabelas, porém, tive que alterar o ordenamento para BY data (no meu caso...), pois via ID não funcionava.

 

Ficou desta forma:

$sql = mysql_query("SELECT status, data, tipo, dono FROM tabela1 WHERE dono = '$id' UNION SELECT status, data, tipo, dono FROM tabela2 WHERE dono = '$id' ORDER BY data DESC");

 

 

Ficou relativamente simples.

Agradeço a todos que ajudaram, com certeza este tópico vai ajudar a outros que também tenham o mesmo problema. :yes:

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.