Ir para conteúdo

POWERED BY:

Arquivado

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

Odair Oliveira_163654

SELECT em mais 3 tabelas

Recommended Posts

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]

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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]

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

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.