Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Pessoal!
Preciso fazer select em 3 tabelas distintas porém não estou conseguindo, o que está errado? (P.S: Sou noob rs :P)
[inline]SELECT * FROM clientes_autos,clientes_diesel,clientes_motos WHERE codigo like '$nome' or nome_clientes like '$nome'"[/inline]Não deu certo, tentei assim mas não retorna nada Oo, página de teste (http://chiptronic.com.br/geomapeamento/consulta/)
Creio eu que seu problema seja o não referenciamento dos campos. Você está tratando três tabelas, e dois campos, no entanto, não mostrou no comando de onde elas são.
Saca só:
É sempre bom colocar apelidos para as tabelas, pois facilita seu desenvolvimento.
SELECT * FROM clientes_autos a ,clientes_diesel d ,clientes_motos m
Aqui vai depender de qual tabela vem o campo. Suponha que 'codigo' seja uma coluna da tabela 'a', e nome_clientes uma coluna da tabela 'd'.
WHERE a.codigo like '$nome' or d.nome_clientes like '$nome'
O código completo. (Lembrando que é uma suposição das referencias das colunas)
SELECT * FROM clientes_autos a ,clientes_diesel d ,clientes_motos m WHERE a.codigo like '$nome' or d.nome_clientes like '$nome'
Olá Valéria!
Entendi o que você disse. No caso esses campos: codigo e nome_clientes estão presentes nas 3 tabelas, isso gera algum conflito ou é tranquilo?
Ah, obrigado pela ajuda :D
Conflito não vai dar, se você referenciar.
Mas eu sugiro que você crie uma tabela só para clientes, com os dados separados, e ai, quando você for fazer o relacionamento entre cliente e autos, motos e diesel, você relaciona só pelo Id.
Tipo assim:
--clientes
id_cliente
nome_cliente
--diesel
id_diesel
FK id_cliente
dado_1_diesel
--autos
id_auto
FK id_cliente
dado_1_auto
Deu pra entender belezinha? Acho que isso facilita e melhora sua base.
>
Conflito não vai dar, se você referenciar.
Mas eu sugiro que você crie uma tabela só para clientes, com os dados separados, e ai, quando você for fazer o relacionamento entre cliente e autos, motos e diesel, você relaciona só pelo Id.
Tipo assim:
--clientes
id_cliente
nome_cliente
--diesel
id_diesel
FK id_cliente
dado_1_diesel
--autos
id_auto
FK id_cliente
dado_1_auto
Deu pra entender belezinha? Acho que isso facilita e melhora sua base.
Deu para entender sim! Vou fazer isso que você me disse, muito obrigado por sua ajuda Valéria :)
Eu segui sua instrução e mesmo assim não deu certo, eu devo estar errando em algum outro lugar
[inline]// Verifica se existe a variável txtnome
if (isset($_GET["txtnome"])) {
$nome = $_GET["txtnome"];
// Conexao com o banco de dados
$server = "";
$user = "";
$senha = "";
$base = "";
$conexao = mysql_connect($server, $user, $senha) or die("Erro na conexão!");
mysql_select_db($base);
// Verifica se a variável está vazia
if (empty($nome)) {
$sql = "SELECT * FROM clientes_autos,clientes_diesel,clientes_motosORDER BY id_clientes";
} else {
$nome .= "%";
$sql = "SELECT * FROM clientes_autos a ,clientes_diesel d ,clientes_motos m WHERE a.codigo like '$nome' or a.nome_clientes like '$nome'";
}
sleep(1);
$result = mysql_query($sql);
$cont = mysql_affected_rows($conexao);
// Verifica se a consulta retornou linhas
if ($cont > 0) {
// Atribui o código HTML para montar uma tabela
$tabela = "
";
$return = "$tabela";
// Captura os dados da consulta e inseri na tabela HTML
while ($mostrar = mysql_fetch_array($result)) {
$return.= "";
$return.= "";
$return.= "";
}
echo $return.="
CÓDIGO NOME " . utf8_encode($mostrar["codigo"]) . " " . utf8_encode($mostrar["nome_clientes"]) . " ";
} else {
// Se a consulta não retornar nenhum valor, exibi mensagem para o usuário
echo "Não foram encontrados registros!";
}
}
?>[/inline]Você não setou valores para as variáveis de conexão:
$server = "";
$user = "";
$senha = "";
$base = "";
$conexao = mysql_connect($server, $user, $senha) or die("Erro na conexão!");
mysql_select_db($base);>
Você não setou valores para as variáveis de conexão:
$server = "";
$user = "";
$senha = "";
$base = "";
$conexao = mysql_connect($server, $user, $senha) or die("Erro na conexão!");
mysql_select_db($base);
E as apaguei para postar.
Cara uma solução, não sei se é boa mas acho que funciona :)
SELECT * FROM (
SELECT
codigo,
nome_clientes
FROM clientes_autos
WHERE codigo like $nome or nome_clientes like $nome
UNION ALL SELECT
codigo,
nome_clientes
FROM clientes_diesel
WHERE codigo like $nome or nome_clientes like $nome
UNION ALL SELECT
codigo,
nome_clientes
FROM clientes_motos
WHERE codigo like $nome or nome_clientes like $nome
)Então amigo qual a quantidade de requisição em cima dessas tabelas? Será que existe a real necessidade de fazer isso em uma query só? Eu penso que se nao for algo muito grande melhor montar tres separadas ou orienta a objeto que fica mole.
Então amigo qual a quantidade de requisição em cima dessas tabelas? Será que existe a real necessidade de fazer isso em uma query só? Eu penso que se nao for algo muito grande melhor montar tres separadas ou orienta a objeto que fica mole.
Creio que existe essa necessidade sim, pois estou implementando um sistema de pesquisa no site, e no caso os clientes estão separados em três tabelas diferentes.
>
Cara uma solução, não sei se é boa mas acho que funciona :)
SELECT * FROM (
SELECT
codigo,
nome_clientes
FROM clientes_autos
WHERE codigo like $nome or nome_clientes like $nome
UNION ALL SELECT
codigo,
nome_clientes
FROM clientes_diesel
WHERE codigo like $nome or nome_clientes like $nome
UNION ALL SELECT
codigo,
nome_clientes
FROM clientes_motos
WHERE codigo like $nome or nome_clientes like $nome
)
Muito obrigado Miguel, tentei aqui mas não funcionou também :(
A busca que quer fazer, se destina especificamente a qual tabela ? as 3, 2, ou apenas 1 tabela ?
Cara, considero uma má prática criar uma tabela para cada categoria de produto.
faz algo assim:
veiculo:
id_veiculo
id_tipo_veiculo
nm_veiculo
tipo_veiculo:
id_tipo_veiculo
nm_tipo_veiculo
cliente:
id_cliente
nm_cliente
vendas (pedidos? orcamentos?):
id_cliente
id_veiculo
Mais simples, simplifica bastante a consulta e facilita caso se queira expandir para outras categorias de veiculos, é só um registro na tabela tipo_veiculo ao invés de uma tabela.
Também evita duplicação de dados, já que você não está colocando dados do cliente em cada veiculo. E se ele tiver mais que um veiculo? E se o endereço mudar?
A busca que quer fazer, se destina especificamente a qual tabela ? as 3, 2, ou apenas 1 tabela ?
A busca se destina as 3 tabelas
TENTA ASSIM:
SELECT clientes_autos.,clientes_diesel. ,clientes_motos.* FROM clientes_autos,clientes_diesel,clientes_motos WHERE codigo like '$nome' or nome_clientes like '$nome'"