Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Exibir dados de 2 tabelas


Nill

Question

e o seuinte tenho uma tabela com os seguintes campos:

CREATE TABLE tbl_pesqsat (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  empresa CHAR(255) NULL,
  responsavel CHAR(255) NULL,
  .
  .
  instaimp INT(2) NULL,
  comentario CHAR(255) NULL,
    
  PRIMARY KEY(id)
);
e a outra tabela
CREATE TABLE tbl_clientes (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  empresa CHAR(255) NULL,
  cnpj CHAR(18) NULL,
  PRIMARY KEY(id)
);
Recebo o ID por meio de post (formulario.php) atravez de outra pagina anterior. E execulto esta consulta:
$sql = "SELECT * FROM tbl_pesqsat WHERE id = '$id'";
 $Execute = mysql_query($sql) or die ("Não foi possivel realizar a consulta");

com esta consulta acima eu consigo ter acesso a todos os dados da tbl_pesqsat, porém eu presciso além desses dados dessa tabela, do CNPJ da tabela tbl_cliente. As duas tabelas tem o campo empresa em comum.

Como faço a segunda consulta para comparar o nome das empresa entre as tuas, e exibir somente o CNPJ.

Deu pra entender?

Edited by Nill
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Oi, Nill!

Respondendo sua pergunta.

SELECT c.cnpj, <outros campos>
FROM tbl_clientes c
INNER JOIN tbl_pesqsat p ON c.empresa = p.empresa
WHERE p.id = xxxxx

Como instrução auxiliar leias os pontos abaixo:

1 . Não coloque o nome da empresa como campo comum para relacionamentos. Se você necessitar torcar o nome da empresa terá que fazê-lo nas duas tabelas. Neste caso use o id da tabela tbl_client na tabela tbl_pesqsat

2 . Utilize índices para racionalizar a pesquisa entre joins. Neste caso, crie indices em c.empresa e em p.empresa. Isto evitará table scan (pesquisa registro a registro entre as duas tabelas para encontrar o que é desejado. Exemplo se tiver 1000 registros em cada tabela e somente 1 registro me satisfaz em cada tabela, então sem indices a pesquisa seria de 1000 x 1000 registros e com índices seria de 2 registros (uma para cada tabela do join).

3 . Você usou "instaimp INT(2) NULL" querendo ou não o mysql criou um integer com 4 bytes (Espaço extra por registro que não estárá sendo utilizado). Integers operam com valores entre -2147483648 e 2147483647. se a cláusula unsigned for utilizada o range ´´e de 0 a 4294967295. Para este propósito TINYINT que ocupará 2 bytes números de -127 a +128 se a cláusula unsigned for usada o range vai de 0 a 255.

4 . Estude sobre normalização de bancos de dados.

Link to comment
Share on other sites

  • 0

Ai Denis, o lance de usar o campo empresa como lance comum, é porque tenho uma pesquisa de satisfação de cliente e para fazer a pesquisa, primeiro verifica se tem a empresa cadastrada no banco, se tiver ai sim o cara faz a pesquisa, e uma empresapode fazer varias pesquesi. Ai por conta disso não conseguir pensa em uma forma de amarar os dois.

Agora como estou iniciando em mysql e não tenho muinto conhecimento, o que sei, foi atravéz de uma apostila que baixei na net.

eu não entendi como o objetivo desse C e do P que você colocou "SELECT c.cnpj" .. "tbl_pesqsat p ON ".

Coloquei o sql que você pasosu e fiz as alterações e ficou assim...

$sql = "SELECT c.cnpj FROM tbl_clientes c INNER JOIN tbl_pesqsat p ON c.empresa = p.empresa WHERE p.id = '$id'";

porém não deu certo.. mas também como falei acima, não entendi muito bem o sql que você colocou!!!

Link to comment
Share on other sites

  • 0

Oi, 'Nill'!

Ai Denis, o lance de usar o campo empresa como lance comum, é porque tenho uma pesquisa de satisfação de cliente e para fazer a pesquisa, primeiro verifica se tem a empresa cadastrada no banco, se tiver ai sim o cara faz a pesquisa, e uma empresa pode fazer varias pesquisas. Ai por conta disso não conseguir pensa em uma forma de amarar os dois.

Existe meio sim. é só pensar um pouco.

Agora como estou iniciando em mysql e não tenho muinto conhecimento, o que sei, foi atravéz de uma apostila que baixei na net.

eu não entendi como o objetivo desse C e do P que você colocou "SELECT c.cnpj" .. "tbl_pesqsat p ON ".

o c é para não ter que escrever tbl_clientes e o p, da mesma forma, é para não ter que escrever tbl_pesqsat.

É uma forma de abreviação. Um ALIAS (apelido) que facilita a digitação, pois quando trqabalhamos com várias tabelas simultâneamente devemos informar que atributo(campo) pertence a que tabela.

Coloquei o sql que você pasosu e fiz as alterações e ficou assim...

$sql = "SELECT c.cnpj FROM tbl_clientes c INNER JOIN tbl_pesqsat p ON c.empresa = p.empresa WHERE p.id = '$id'";

porém não deu certo.. mas também como falei acima, não entendi muito bem o sql que você colocou!!!

Não funcionou por qual das razões abaixo?

Você não tem a empresa correspondente nas duas tabelas

Você inseriu um id não existente

Você não criou os índices para os atributos empresa nas tabelas tbl_clientes e tbl_pesqsat. (um indice para cada tabela)

Ou outra razão? O que está havendo de errado?

Link to comment
Share on other sites

  • 0

valeu pessoal pela dica.. Resolvi mudar a estrutura das tabelas, achei apostila um tutorial ensinando a usar FK e usando o relacionamento 1:n, ai mudei a estrutura da tabela e agora deu certo, de qualquer forma agradeço a todos pelas dicas e ajudas.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...