Ir para conteúdo

POWERED BY:

Arquivado

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

conseld

DISTINCT * não está retirando a duplicidade

Recommended Posts

Olá pessoal eu ja fiz de tudo para remover a duplicidade do banco de dados.

No começo ele está vindo em varios Checkbox que é selecionado em "Bairros" e utilizei como Array

for($m=0; $m<count($_POST["bairros"]); $m++){// LOOP 1
                          $pesquisar=($_POST["bairros"][$m]);
                                          
                    //Resgate do bairros(Array) e esporte (POST)                 
                    $query = "SELECT DISTINCT * FROM cadastro WHERE  
                            (esporte1 = '".$_POST["esportes"]."' OR
                             esporte2 = '".$_POST["esportes"]."' OR
                             esporte3 = '".$_POST["esportes"]."' OR
                             esporte4 = '".$_POST["esportes"]."')
                            AND
                            (bairro1 = '".$pesquisar."' OR
                             bairro2 = '".$pesquisar."' OR
                             bairro3 = '".$pesquisar."' OR
                             bairro4 = '".$pesquisar."')
                            AND
                            ativarAparecer='sim' ORDER BY nomeCompleto ASC LIMIT 20";
                    $esporte= new consultar();
                    $esporte->executa($query);

//Loops resgatados 
for($l=0; $l<$esporte->nrw; $l++){ //LOOP 2

echo $esporte->data["nomeCompleto"]."<br />"; 

     $esporte->proximo();

    }//Fecha LOOP2

}//Fecha LOOP1

*** Destalhe essa função está orientação objeto.. Estou achando que estou errando no SQL no MYSQL ** falta algo ai

 

Alguem me ajuda?
Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa modelarem está errada.

 

Campos: esporte1, esporte2, esporte3, esporte4 e bairro1, bairro2..

Vamos modelar novamente essa entidade, seguindo as formas normais ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa modelarem está errada.

 

Campos: esporte1, esporte2, esporte3, esporte4 e bairro1, bairro2..

Vamos modelar novamente essa entidade, seguindo as formas normais ?

Olá amigo obrigado pela mensagem.

O POST esporte e importante pois é selecionado com "input radio" um esporte, o que vale mesmo são os bairros que imprimir varios esportes para este bairro, no momento está duplicando.

 

Acho que foi está dúvida?

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o @William quis dizer é que sua modelagem pode ser diferente, e isso pode sanar seu problema.

 

Acho. :closedeyes:

 

Ao invés de usar diversos campos esporte1, 2... crie uma tabela separada (ex: tbl_esporte), e depois uma tabela interligando o cadastro ao esporte (ex: tbl_esporte_cadastro).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato @Maykel-ctba.

 

Essa tabela com colunas "duplicadas" é a causa do seu problema, @newtwin.

Modelando essa tabela seguindo as Formas Normais o seu problema se resolverá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá tenho isso no meu banco de dados

 

Pensei em fazer o GROUP

Eu não sei se a minha logica está certo.

Tente fazer assim antes de enviar para busca.

for($m=0; $m<count($_POST["bairros"]); $m++){
                          $pesquisar=($_POST["bairros"][$m]);
                    }
$query = "SELECT DISTINCT * FROM cadastro WHERE  
                            (esporte1 = '".$_POST["esportes"]."' OR
                             esporte2 = '".$_POST["esportes"]."' OR
                             esporte3 = '".$_POST["esportes"]."' OR
                             esporte4 = '".$_POST["esportes"]."')
                            AND
                            (bairro1 = '".$pesquisar."' OR
                             bairro2 = '".$pesquisar."' OR
                             bairro3 = '".$pesquisar."' OR
                             bairro4 = '".$pesquisar."')
                            AND
                            ativarAparecer='sim' GROUP BY bairro1,bairro2,bairro3,bairro4 ORDER BY nomeCompleto ASC LIMIT 20";
bairro1 | bairro2 | bairro3 | bairro4
     14 |    14   |   15    | 27
     34 |    15   |   14    | 30
     27 |    45   |   12    | 14

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explique o que é essa aplicação, e pq vc tem 4 bairros e 4 esportes.

 

Ai iremos te sugerir a modelagem correta, com a solução final na query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo eu tenho uma tabela com varias colulas e uma delas tem 4 esportes e 4 bairros

http://www.qesporte.com

Selecione Esporte (Tenis) depois Bairros (Moema + Morumbi e Campo Belo) clique em pesquisar, Verifique que está duplicando varias vezes RPTenis

No html está usando input radio (Apenas seleciona um esporte)

esporte1 | sporte2 | esporte3 | esporte4

Bairros você seleciona varios usando checkbox

bairro1 | bairro2 | bairro3 | bairro4
     14 |    14   |   15    | 27
     34 |    15   |   14    | 30
     27 |    45   |   12    | 14

E resultado como já mostrei acima, ele funciona mas está publicando.

Amigo muito super obrigado se quiser me adicionar no skype é conseld

Valeu!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa então de 3 tabelas:

 

TABLE bairros

id, nome

 

TABLE esportes

id, nome

 

TABLE esporte_bairro

id_bairro, id_esporte

 

Que é exatamente o que o @Maykel-ctba disse.

Em vez de tentar fazer tudo em uma única tabela, o correto é você Normalizar e usar o SQL corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo a sua dica é interessante.
Uma dúvida vou ter duas tabelas uma esporte e outra bairros

Na hora de conectar as tabelas tenho que usar o INNER JOIN.
No meu esquema aqui só precisa cadastrar 4 esportes e 4 bairros.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Selecionando apenas um esporte

SELECT cad.*, ces.*, esp.* FROM cadastro cad, cadastro_esporte ces, esporte esp
WHERE ces.cadastro_id = cad.id
AND ces.esporte_id = esp.id
AND esp.esporte_id = 1 // * ID de esporte 1: Futebol, por exemplo

Trará todos os registros com seus característicos esportes. No exemplo, só futebol.

Você pode usar JOIN se quiser para unir tudo em uma linha, por exemplo. Tudo tem que testar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu esquema aqui só precisa cadastrar 4 esportes e 4 bairros.

vc está subestimando a aplicação. E isso é um erro do ponto de vista de negócios.

 

Se amanhã precisarem ser 5, ou 6, vc terá que criar novas colunas, e mais gambiarras e mais gambiarras tudo por causa de uma modelagem ruim.

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.