
2 Consultas
#1
Posted 05/01/2008, 17:40
Tenho um sistema onde são listadas as EMPRESAS cadastradas de várias cidades, ao lados da lista tem um LINK para uma página com mais informações onde esta página imprime os dados detalhado da empresa SELECIONADA através do link.
O cadastro está dividido em DUAS tabelas, sendo TABELA empresas e TABELA cidades onde tem as seguintes estruturas:
cidades
id // ID autoincremento
cidade // Nome da cidade
empresas
id // Aqui ID autoincremento
empresa // Aqui o nome da empresa
cidade // Aqui fica armazenado o ID da cidade
Como existem duas TABELAS quando faço a primeira SQL empresas imprimo os dados bunitinhu, porém o campo CIDADE da TABELA EMPRESAS armazena o ID da TABELA CIDADES e não o nome EM SI, assim sendo imprime o ID sendo que eu quero que imrpima o nome da cidade.
Assim sendo to fazendo DUAS SQL, sendo que eu queria aprender a usar o JOIN para não ter de ficar fazendo VÁRIAS SQL para um único resultado.
Segue abaixo meu código:
[codebox]
$id = $_GET['id'];
$sql = "SELECT * FROM busca_empresas WHERE id_empresa = '$id'";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$sql_cidade = "SELECT busca_cidades.cidade FROM busca_cidades WHERE busca_cidades.id_cidade = ".$row['cidade']."";
$res_cidade = mysql_query($sql_cidade);
$row_cidade = mysql_fetch_array($res_cidade);
[/codebox]
echo $row['cidade']; // Aqui imprime 1
echo $row_cidade['cidade']; // Aqui aparece Rio Claro CORRETO
Como fazer a consulat acima em uma ÚNICA SQL?
Minha segunda pergunta é como vou imprimir isso?
Usando um único $row['?????']; // To fazendo consulta em DUAS tabelas por isso não saberia como imrimir os resultados
Espero ter sido claro e que alguém possa me ajudar!
Desde já agradeço!
#2
Posted 05/01/2008, 22:43
("SELECT empresas.empresa, cidades.cidade FROM empresas
JOIN cidades ON empresas.cidade = cidades.cidade
WHERE id_empresa = '$id'");
Testa ai, qualquer coisa posta novamente...
Valeu
Edição feita por: Marcivone, 05/01/2008, 23:04.
#3
Posted 05/01/2008, 23:21
#4
Posted 05/01/2008, 23:25
#5
Posted 05/01/2008, 23:33
mas e se você um empresa em mais de uma cidade, eu já estou pensando alem disso
o correto era ser o contraio se vc quer diminuir as buscas
por ex
empresa x tem na cidade 1 2 3 4
vc vai ter apenas uma busca por 1 depois por 2 ...
se vc colocar na cidade a emprese q tem nela
vc apenas vai ter uma busca
ex empresa x id 1
cidadade 1 tem
cidadade 2 tem
cidadade 3 não tem
assim vc só usa uma busca
e Marcivone eu entendei XD
Edição feita por: Jeison Free, 05/01/2008, 23:37.
#6
Posted 05/01/2008, 23:38
E Jeison, tive vendo outras respostas suas, e gostei bastante, PARABÉNS...
comecei a pouco no PHP, e foi tudo graças a este forum, a intenção é só ajudar.
Edição feita por: Marcivone, 05/01/2008, 23:41.
#7
Posted 05/01/2008, 23:39
Isso não afeta em nada.Nesse caso creio que não seria correto usar o JOIN pois primeiro você terá q fazer uma consuta em empresas e depois em cidades pois o id da cidade pode ser diferende do id da empresa alem disso pode haver mais cidades com a mesma empresa coisas desse tipo
Se em me lembro bem a consulta seria assim:
SELECT empresa.*, cidade.cidade FROM busca_empresas AS empresa LEFT JOIN busca_cidades AS cidade ON empresa.cidade = cidade.id_cidade WHERE empresa.id_empresa = $idPS: Não testei.

PS: Movendo pro local adequado.

[]s

#8
Posted 06/01/2008, 06:35
Suponha as duas tabelas:
grupos
- id (int)
- titulo (varchar)
contatos
- id (int)
- nome (varchar)
- email (varchar)
- grupo (int)
A idéia é praticamente a mesma do exemplo do tópico: o campo grupo na tabela contatos grava o id do grupo relacionado na tabela grupos.
Assim, ao selecionar um registro em contatos, o grupo do registro será um número, e deverá então consultar a tabela grupos para ver qual o título.
Agora além de fazer uma única consulta já retornando o titulo do grupo ao invés do ID apenas, tem como ainda ordenar o resultado em ordem alfabética pelo nome do grupo? Pois o select "normal" apenas na tabela contatos, se ordenar pelo campo grupo vai ordenar pela ordem numérica, sendo que se 1=Trabalho e 2=Amigos já teremos um resultado não ordenado alfabeticamente.
Muito complicado??


#9
Posted 06/01/2008, 09:07
vc vai ter o grupo 1
então faz uma pesquisa na tabela contatos listando os nomes buscando somente os que tiverem grupo igual o id grupo e depois vc manda ordenar em ASC
flws ^^
#10
Posted 06/01/2008, 12:46
Basta ordenar pelo nome do campo da outra tabela.A idéia é praticamente a mesma do exemplo do tópico: o campo grupo na tabela contatos grava o id do grupo relacionado na tabela grupos.
Assim, ao selecionar um registro em contatos, o grupo do registro será um número, e deverá então consultar a tabela grupos para ver qual o título.
Agora além de fazer uma única consulta já retornando o titulo do grupo ao invés do ID apenas, tem como ainda ordenar o resultado em ordem alfabética pelo nome do grupo? Pois o select "normal" apenas na tabela contatos, se ordenar pelo campo grupo vai ordenar pela ordem numérica, sendo que se 1=Trabalho e 2=Amigos já teremos um resultado não ordenado alfabeticamente.
Muito complicado??

Naquele exemplo acima ficaria:
SELECT empresa.*, cidade.cidade FROM busca_empresas AS empresa LEFT JOIN busca_cidades AS cidade ON empresa.cidade = cidade.id_cidade WHERE empresa.id_empresa = $id ORDER BY cidade.cidade ASC[]s

#11
Posted 07/01/2008, 09:14
Como nunca consegui aprender a user JOIN (eu devo ter alguma coisa contra elas mesmo) fiz assim:
$imovelUser = 'SELECT `ID` FROM `imoveis` WHERE `owner` = (SELECT `username` FROM `pusers` WHERE `ID` = \'' . $curUser . '\')';Um SELECT dentro de um SELECT.
Funciona como o esperado. Mas qual o melhor modo? Assim, ou com JOIN? Pergunto isso não porque obrigatoriamente vou alterar nesse script. Mas talvez numa futura atualização seria interessante ago do tipo.
#12
Posted 07/01/2008, 09:33
A não ser que você não se importe com performance, use JOIN.
O banco de dados agradece

1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)