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: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

16-07-2013 12:58

boa tarde.


estou fazendo um script e meu select esta selecionando uma tabela e puxando os dados normal
nessa tabela chamada "imoveis" tem um uma coluna chamada "codigo" esse codigo eh unico para cada imovel cadastrado e tem uma coluna chamada "tipoimovel" que vai de 01 a 05.

tem outras duas tabelas que sao fotos e tipodeimoveis
na tabela fotos tem o "codigo" e a url da foto
na tabela tipoidemoveis tem as coluna com os numeros de 01 a 05 e a descricao de cada um

resumindo.

gostaria de saber no meu como faço no meu select para selecionar a tabela e relacionar com as outras.

atualmente esta assim

$sql = "SELECT tipoimovel, bairro, operacao, municipio, uf, codigo, vlrimovel FROM imoveis WHERE operacao='V'"; $resultado = mysql_query($sql) or die ("Não foi possível executar a consulta"); while ($linha = mysql_fetch_array($resultado)) { $codigo = $linha["codigo"]; $tipo = $linha["tipoimovel"]; $municipio = $linha["municipio"]; $uf = $linha["uf"]; $bairro= $linha["bairro"]; $valor = $linha["vlrimovel"]; echo "<li>"; echo "<div class='box-item'>"; echo "<div>"; echo "<img src='imoveis/fotos/V_ARU_0469562080[00]_mini.jpg' width='144' height='107' />"; echo "</div>"; echo "<br />"; echo "$municipio - $uf<br />"; echo "R$: $valor<br />"; echo "<br />"; echo "</div>"; echo "</li>"; } mysql_free_result($resultado); mysql_close(); 

desde ja agradeço e desculpe se postei no lugar errado.

vlww

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

SELECT de duas ou mais tabelas.

16-07-2013 13:58

Você pode usar o LEFT JOIN. Segue um exemplo

$sql = "SELECT * FROM tabela1 A LEFT JOIN tabela2 B ON A.id_unico = B.id_unico"; 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

16-07-2013 14:08

hmmm. que valor seria o A e B?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

SELECT de duas ou mais tabelas.

16-07-2013 14:36

Seria uma letra representativa para o nome das tabelas. As mesmas são usadas no ON.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

16-07-2013 15:00

entendi

quando coloco SELECT * FROM com o asterisco nunca faz a consulta. onde eu errei?

$sql = "SELECT * FROM imoveis A LEFT JOIN tiposdeimoveis B ON A.tipoimovel, A.bairro, A.operacao, A.municipio, A.uf, A.codigo, A.vlrimovel = B.codigo, B.descricao"; $resultado = mysql_query($sql) or die ("Não foi possível executar a consulta");

to chamando os dados no while

while ($linha = mysql_fetch_array($resultado)) { $codigo = $linha["A.codigo"]; $tipo = $linha["A.tipoimovel"]; $municipio = $linha["A.municipio"]; $uf = $linha["A.uf"]; $bairro= $linha["A.bairro"]; $valor = $linha["A.vlrimovel"];  

0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

16-07-2013 16:09

estrutura das tabelas.

-- Table structure for table `imoveis` --   CREATE TABLE IF NOT EXISTS `imoveis` (   `OPERACAO` CHAR(1) DEFAULT NULL COMMENT 'V=Venda, L=Locação',   `SEDE` CHAR(3) DEFAULT NULL,   `CODIGO` VARCHAR(10) NOT NULL DEFAULT '',   `LOGRADOURO` VARCHAR(40) DEFAULT NULL,   `LOGRADOURO_NUMERO` VARCHAR(5) DEFAULT NULL,   `COMPLEMENTO` VARCHAR(50) CHARACTER SET utf8 DEFAULT NULL,   `BAIRRO` VARCHAR(30) DEFAULT NULL,   `MUNICIPIO` VARCHAR(30) DEFAULT NULL,   `UF` CHAR(2) DEFAULT NULL,   `REFERENCIAWEB` VARCHAR(15) DEFAULT NULL,   `AREA` DOUBLE(9,2) DEFAULT NULL,   `METRAGEM` VARCHAR(15) DEFAULT NULL,   `COMODOS` CHAR(2) DEFAULT NULL,   `CARACTERISTICAS` text,   `TIPOIMOVEL` CHAR(2) DEFAULT NULL,   `TIPOIMOVELORIGINAL` CHAR(2) DEFAULT NULL,   `VLRIPTU` DOUBLE(9,2) DEFAULT NULL,   `VLRCONDOMINIO` DOUBLE(9,2) UNSIGNED DEFAULT NULL,   `DESATIVADO` CHAR(1) DEFAULT NULL,   `VLRIMOVEL` DOUBLE(9,2) UNSIGNED DEFAULT NULL,   `DATA_IN_EX_CLUSAO` VARCHAR(8) DEFAULT NULL,   `QUEM_FEZ` VARCHAR(10) DEFAULT NULL,   KEY `CODIGO` (`CODIGO`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


-- -- Table structure for table `tipodeimoveis` --   CREATE TABLE IF NOT EXISTS `tipodeimoveis` (   `OPERACAO` CHAR(1) DEFAULT NULL COMMENT 'V=Venda, L=Locação',   `SEDE` CHAR(3) DEFAULT NULL,   `CODIGO` CHAR(2) DEFAULT NULL,   `DESCRICAO` VARCHAR(40) DEFAULT NULL,   `DESATIVADO` VARCHAR(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  

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

SELECT de duas ou mais tabelas.

16-07-2013 18:02

O sql tendo o INSERT com alguns valores facilita.

Você não precisa selecionar todos os campos da segunda tabela.

Depois do ON, entra somente as colunas de ambas tabelas que serão comparadas

ON A.colunatal=B.colunatal
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

17-07-2013 09:48

entendi. não sei se fiz o select errado ou chamei as variáveis erradas. mas não puxou os dados

$sql = "SELECT * FROM imoveis A LEFT JOIN tipodeimoveis B ON A.codigo=B.codigo";  $resultado = mysql_query($sql) or die ("Não foi possível executar a consulta"); while ($linha = mysql_fetch_array($resultado)) { $codigo = $linha["codigo"]; $tipo = $linha["tipoimovel"]; $municipio = $linha["municipio"]; $uf = $linha["uf"]; $bairro= $linha["bairro"]; $valor = $linha["vlrimovel"];  

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

SELECT de duas ou mais tabelas.

17-07-2013 19:31

Para saber o erro que ocorreu, faz assim

$resultado = mysql_query($sql) OR die (mysql_errror()); 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

22-07-2013 22:06

nao aparece erro. soh nao printa nada
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

SELECT de duas ou mais tabelas.

23-07-2013 10:07

Você fez assim:

$sql = "SELECT * FROM imoveis A LEFT JOIN tipodeimoveis B ON A.codigo=B.codigo";  $resultado = mysql_query($sql) or die ("Não foi possível executar a consulta"); 

Se não aparece erro, então não tem dados entre as duas tabelas que sejam iguais.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

23-07-2013 11:16

assim. em um tabela tem os imoveis com os dados. rua, cidade uf, etc. e tem um campo chamado codigo. esse codigo eh unico. eh como se fosse o ID.

na outra tabela tem os tipos de imoveis. ex. casa, apartamento, chacara etc. e nessa tabela tem um campo codigo que eh o mesmo campo da outra.
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

23-07-2013 11:25

acho que to confundindo os campos.

veja as tabelas.


    -- -- Table structure for table `imoveis` --   CREATE TABLE IF NOT EXISTS `imoveis` (   `OPERACAO` CHAR(1) DEFAULT NULL COMMENT 'V=Venda, L=Locação',   `SEDE` CHAR(3) DEFAULT NULL,   `CODIGO` VARCHAR(10) NOT NULL DEFAULT '',   `LOGRADOURO` VARCHAR(40) DEFAULT NULL,   `LOGRADOURO_NUMERO` VARCHAR(5) DEFAULT NULL,   `COMPLEMENTO` VARCHAR(50) CHARACTER SET utf8 DEFAULT NULL,   `BAIRRO` VARCHAR(30) DEFAULT NULL,   `MUNICIPIO` VARCHAR(30) DEFAULT NULL,   `UF` CHAR(2) DEFAULT NULL,   `REFERENCIAWEB` VARCHAR(15) DEFAULT NULL,   `AREA` DOUBLE(9,2) DEFAULT NULL,   `METRAGEM` VARCHAR(15) DEFAULT NULL,   `COMODOS` CHAR(2) DEFAULT NULL,   `CARACTERISTICAS` text,   `TIPOIMOVEL` CHAR(2) DEFAULT NULL,   `TIPOIMOVELORIGINAL` CHAR(2) DEFAULT NULL,   `VLRIPTU` DOUBLE(9,2) DEFAULT NULL,   `VLRCONDOMINIO` DOUBLE(9,2) UNSIGNED DEFAULT NULL,   `DESATIVADO` CHAR(1) DEFAULT NULL,   `VLRIMOVEL` DOUBLE(9,2) UNSIGNED DEFAULT NULL,   `DATA_IN_EX_CLUSAO` VARCHAR(8) DEFAULT NULL,   `QUEM_FEZ` VARCHAR(10) DEFAULT NULL,   KEY `CODIGO` (`CODIGO`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;   -- -- Dumping data for table `imoveis` --   INSERT INTO `imoveis` (`OPERACAO`, `SEDE`, `CODIGO`, `LOGRADOURO`, `LOGRADOURO_NUMERO`, `COMPLEMENTO`, `BAIRRO`, `MUNICIPIO`, `UF`, `REFERENCIAWEB`, `AREA`, `METRAGEM`, `COMODOS`, `CARACTERISTICAS`, `TIPOIMOVEL`, `TIPOIMOVELORIGINAL`, `VLRIPTU`, `VLRCONDOMINIO`, `DESATIVADO`, `VLRIMOVEL`, `DATA_IN_EX_CLUSAO`, `QUEM_FEZ`) VALUES ('V', 'ARU', '0481239169', 'Rua da Igreja', '00456', '', 'Morro dos Conventos', 'Ararangua', 'SC', 'V-1', 105.00, NULL, '', '3 Quartos, 1 Escritorio, Sala, Cozinha, Banheiro, Área de serviço\r\n\r\n\r\n\r\n\r\n\r\n', '01', '04', 0.00, 0.00, 'S', 400000.00, '20130612', '0469558220'), ('V', 'ARU', '0479963986', 'João Bento de Souza', '', '', 'Coloninha', 'Ararangua', 'SC', 'V-2', 0.00, NULL, '', '', '02', '08', 0.00, 0.00, 'S', 90000.00, '20130612', '0469558220');   -- --------------------------------------------------------   -- -- Table structure for table `tipodeimoveis` --   CREATE TABLE IF NOT EXISTS `tipodeimoveis` (   `OPERACAO` CHAR(1) DEFAULT NULL COMMENT 'V=Venda, L=Locação',   `SEDE` CHAR(3) DEFAULT NULL,   `CODIGO` CHAR(2) DEFAULT NULL,   `DESCRICAO` VARCHAR(40) DEFAULT NULL,   `DESATIVADO` VARCHAR(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;   -- -- Dumping data for table `tipodeimoveis` --   INSERT INTO `tipodeimoveis` (`OPERACAO`, `SEDE`, `CODIGO`, `DESCRICAO`, `DESATIVADO`) VALUES ('V', 'ARU', '01', 'Casa de Alvenaria', 'N'), ('V', 'ARU', '02', 'Terreno', 'N');        

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

SELECT de duas ou mais tabelas.

23-07-2013 15:07

A melhor opção para essa consulta é

$sql = "SELECT * FROM imoveis, tipodeimoveis WHERE imoveis.TIPOIMOVEL=tipodeimoveis.CODIGO"; //$sql = "SELECT * FROM imoveis A LEFT JOIN tipodeimoveis B ON A.codigo=B.codigo"; $resultado = mysql_query($sql) or die ("Não foi possível executar a consulta"); while($dados=mysql_fetch_array($resultado)) { extract($dados); echo "$BAIRRO - $DESCRICAO<br />"; } 

Depois altera para pegar só as colunas que precisa, tipo:

SELECT imoveis.BAIRRO, tipodeimoveis.DESCRICAO, tipodeimoveis.BAIRRO.....
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

SELECT de duas ou mais tabelas.

25-07-2013 01:24

Você possui duas tabelas:
- tabela imoveis
- tabela tipodeimoveis

Só pra eu entender, a tabela tipo de imoveis é pra constar se é "apartamento", "casa", "loja"?
Se sim, coloque o campo "CODIGO" da tabela "tipodeimoveis" como chave primária.
Feito isso, você agora tem na tabela "tipodeimoveis" o registro de CODIGO "1", DESCRICAO "apartamento", por exemplo.

Perceba, agora você quer pegar todos os registros da tabela "imoveis" que são "apartamentos".

SELECT * FROM imoveis i  INNER JOIN tipodeimoveis ti ON i.tipoimovel = ti.codigo  WHERE ti.codigo = 1

Ve se isso te ajuda!
:!:

Mais uma coisa, seja cauteloso na modelagem do seu banco de dados, para que não tenha dores de cabeça futuramente!
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 09:37

deu certinho. muito obrigado web e brunoban
fiz o select assim

$sql = "SELECT imoveis.TIPOIMOVEL, imoveis.MUNICIPIO,  imoveis.UF, imoveis.VLRIMOVEL, tipodeimoveis.CODIGO,  tipodeimoveis.DESCRICAO FROM imoveis, tipodeimoveis  WHERE imoveis.TIPOIMOVEL=tipodeimoveis.CODIGO";

0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 09:46

agora preciso pegar as fotos de outra tabela chamada fotos. nessa tabela tem uma coluna chamada IMOVEL e outra NRORDEM
a coluna IMOVEL é o codigo dele. e a NRORDEM vai de 00 a 09, que sao 9 fotos queria pegar a primeira pra colocar de capa.

fiz um select mas nao pode realizar a consulta.

$sql = "SELECT  imoveis.CODIGO, imoveis.TIPOIMOVEL, imoveis.MUNICIPIO, imoveis.UF, imoveis.VLRIMOVEL,  tipodeimoveis.CODIGO, tipodeimoveis.DESCRICAO,  fotos.IMOVEL, fotos.NRORDEM,  FROM imoveis, tipodeimoveis, fotos  WHERE imoveis.TIPOIMOVEL=tipodeimoveis.CODIGO";

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

SELECT de duas ou mais tabelas.

25-07-2013 11:04

adiciona ao select
fotos.NRORDEM

no WHERE adiciona
and fotos.NORDEM=imoveis.TIPOIMOVEL
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 11:18

fotos.NRORDEM ja estava neh?

faltou o outro where.

coloquei e ficou assim.

$sql = "SELECT imoveis.CODIGO, imoveis.TIPOIMOVEL, imoveis.MUNICIPIO, imoveis.UF, imoveis.VLRIMOVEL,  tipodeimoveis.CODIGO, tipodeimoveis.DESCRICAO  fotos.IMOVEL, fotos.NRORDEM  FROM imoveis, tipodeimoveis, fotos  WHERE imoveis.TIPOIMOVEL=tipodeimoveis.CODIGO and fotos.NRORDEM=imoveis.TIPOIMOVEL"; $resultado = mysql_query($sql) or print mysql_error(); while($dados=mysql_fetch_array($resultado)) { extract($dados); 

deu este erro

  You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.IMOVEL, fotos.NRORDEM FROM imoveis, tipodeimoveis, fotos WHERE imoveis.TIPOIM' at line 3 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in imo_venda.php on line 22   Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in imo_venda.php on line 57  

0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 11:21

corrigido, faltou uma virgula. vlwww
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 15:56

nesse sistema que to fazendo ele vai puxar os dados e colocar como capa somente uma foto.
como faço pra ele mostrar somente um registro? coloquei a chamada da foto dentro do while e chamou todos os registros.
porque a foto de capa eh sempre [00] isso eu deixei constante.

while($dados=mysql_fetch_array($resultado)) { extract($dados); echo '<img src="fotos/' . $OPERACAO . '_' . $SEDE . '_' . $IMOVEL . '[00]_mini.jpg"'; echo "<br />"; echo "$DESCRICAO"; echo "$MUNICIPIO - $UF<br />"; echo "<br />";  

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

SELECT de duas ou mais tabelas.

25-07-2013 16:17

Você tem que colocar um LIMIT na consulta. LIMIT 1
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 16:42

mas isto mostrará somente um resultado em toda a consulta nao ?
teria que mostrar todos os imoveis e cada imovel pegar a foto do codigo que tem o NRORDEM 00.
se eu colocar constante ele pega todos mais a constante.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

SELECT de duas ou mais tabelas.

25-07-2013 16:45

Já tentou adicionar no final da consulta imoveis.NORDEM="00" ?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 383
Sexo: Masculino
Localização: criciuma

SELECT de duas ou mais tabelas.

25-07-2013 16:57

eu tinha colocado

and fotos.NRORDEM='00';

mas nao funcionou
0

Quem está online

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