Ir para conteúdo

POWERED BY:

Arquivado

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

Quati Maldito

Select simples num funciona

Recommended Posts

Bom dia galera.

 

Preciso listar 2 tabelas(produtos x itens) no mysql.

 

PRODUTOS

id_produto int(10)

id_linha_produtos int(10)

ativo tinyint(3)

 

ITENS

id_item int(10)

id_produto int(10)

 

entaum fiz assim :

 

SELECT * FROM produtos inner JOIN itens ON produtos.id_produto = itens.id_produto WHERE produtos.ativo = 1 

tenho apenas um registro na tabela de produtos, que está desativado, ou seja, o campo ativo tem o valor 0(ZERO), os demais tem valor 1(UM)

 

mas a condição do select é ignorada, ele traz todos os registros ativos e o não ativo. e se eu inverter a busca para procurar os não ativos, num trás nada.

 

ALGUÉM AI PODE ME DIZER ONDE ESTOU VIAJANDO?

 

pois é meu banco de dados lazarento que num quer de jeito nenhum funcionar direito, mas somente com um registro! qq outro q eu altere o flag de ativado ou naum, ele funciona, ou seja, lista ou naum o registro, mas para este registro em especifico, por mais que eu altere e no banco me apresente o valor "correto", ele sempre lista o registro, estando com valor para ser mostrado ou naum.

 

ainda num consegui resolver o problema, pois num posso excluir o registro, pois trocentos outros dependem dele...

 

ja alterei o registro de várias formas, pelo asp, pelo phpmyadmin...

 

de qq forma, seu q agora o erro num está no select, entaum alguém sabe o q posso fazer para resolver esse negócio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço MySql mas não pode ser este type tinyint?

 

até pensando no que disse, mudei o campo para varchar para ver se mudava alguma coisa mas por incrível q pareça nada mudou..

 

vou procurar mais um pouco, se num encontrar meio de "normalizar" o registro, vou remover o mesmo e todos seus dependentes e recadastrá-los, por mais idiota que possa parecer.

 

obrigado mesmo assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

onde você está executando esta SQL? do php???

 

se tem acesso ao console do mysql, tente rodar esta query la e ver o resultado...

 

Outra coisa, use aliases para os nomes de tabelas..

 

De

SELECT * FROM produtos inner JOIN itens ON produtos.id_produto = itens.id_produto WHERE produtos.ativo = 1

Para isto

SELECT p.* FROM produtos p INNER JOIN itens i ON p.id_produto = i.id_produto WHERE p.ativo = 1

Outra observação, se você utiliza apenas 0 e 1 na coluna ativo, a coluna deveria ser tinyint(1) = isso te daria de 0 - 9, ou seja você teria bastante espaço para por exemplo

 

0 - ativo

1 - inativo

2 - cancelado

3 - aguardando confirmação

 

e assim por diante, mas se planeja ter mais de 10 variações, dai tem que aumentar o tamenho do field mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é q eu migrei este banco de dados do access e era boolean, ai ele gera esse campo tinyint automaticamente com 3 e eu nem tinha percebido.

 

uso asp, o select com aliases está implementado, vlw

 

verificando com mais calma, percebi que vários registros são mostrados mesmo com o campo ativo = 0, eu pensei q fosse um só, mas naum é, tem mais, embora com outros registros funcione...

 

Num to entendendo mais nada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A query completa tem mais condições.

 

Já tentei com a query das seguintes formas:

 


SELECT p.*, s.* FROM produtos AS p inner JOIN itens AS s ON s.id_produto = p.id_produto and p.ativo = 1 where p.id_linha_produtos = 4 and s.id_veiculo = 174 


SELECT p.*, s.* FROM produtos AS p inner JOIN itens AS s ON s.id_produto = p.id_produto where p.ativo = 1 and p.id_linha_produtos = 4 and s.id_veiculo = 174 
 

das duas formas ele mostra exatamente a mesma coisa.

 

na url abaixo poderá ver o retorno, a lista que está retornando no momento não reveria retornar nada, todos tem o valor 0(zero) no campo ativo.

 

http://gustavorosa.com.br/catalogo/lista_itens.asp?id_linha_produtos=4&id_veiculo=174

 

Este relacionamento de produtos e itens, é de um para muitos, um produto tem vários itens, e o campo ativo está na tabela produtos.

 

Mas num sei se isso tem a ver, por que o outro campo da tabela produtos id_linha_produtos, no select a condição é respeitada..

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

A query completa tem mais condições.

 

Já tentei com a query das seguintes formas:

 


SELECT p.*, s.* FROM produtos AS p inner JOIN itens AS s ON s.id_produto = p.id_produto and p.ativo = 1 where p.id_linha_produtos = 4 and s.id_veiculo = 174 


SELECT p.*, s.* FROM produtos AS p inner JOIN itens AS s ON s.id_produto = p.id_produto where p.ativo = 1 and p.id_linha_produtos = 4 and s.id_veiculo = 174 
 

das duas formas ele mostra exatamente a mesma coisa.

 

na url abaixo poderá ver o retorno, a lista que está retornando no momento não reveria retornar nada, todos tem o valor 0(zero) no campo ativo.

 

http://gustavorosa.com.br/catalogo/lista_itens.asp?id_linha_produtos=4&id_veiculo=174

 

Este relacionamento de produtos e itens, é de um para muitos, um produto tem vários itens, e o campo ativo está na tabela produtos.

 

Mas num sei se isso tem a ver, por que o outro campo da tabela produtos id_linha_produtos, no select a condição é respeitada..

 

vlw

 

No campo ativo use small int com valor default 1, caso dê errado tire a expressão inner join e use apenas Join.

Esse problema pode ser na conversão dos dados do Access para o Mysql.

 

Uma sugestão caso dê errado os ítens acima, utilize casting:

 

SELECT *,CAST(produtos.ativo AS smallint(1)) as ColunaAtivo

FROM produtos AS p inner JOIN itens AS s ON s.id_produto = p.id_produto where ColunaAtivo = 1

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.