Ir para conteúdo

Arquivado

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

caiocafardo

Select array em array

Recommended Posts

Opa, tudo bem galera?

Tenho uma array em PHP assim:

$array = array("1", "2", "3", "4"); 

E tenho uma tabela em MYSQL que uma das colunas qualid recebe valores, dessa forma: 2,7,8

Queria dar um SELECT WHERE $array IN qualid

Como fazer isso? Se um dos elementos da $array existir no campo qualid já mostraria o resultado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela resposta Lokaodomau, é assim:

Em um sistema que estou fazendo eu cadastro produtos nele, um dos campos do produto é a cor, e pode ter mais de uma cor, ou seja, fica assim:

id - 5
nome - produto teste
preco - 33.00
cor - 3,8

Aí na hora da busca o usuario pode buscar produtos por cores, então ele marca 2 cores (ou mais) e clica em search, o link que é gerado é esse:

produtos/cores=1,3,5

Ou seja, precisa listar nessa página todos os produtos que tenham uma ou mais dessas cores escolhidas pelo usuário, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se este campo do MySQL guardar 'ID' de outra tabela, aconselho pesquisar um pouco sobre Normalização de Dados.

 

Mas primeiro, preciso saber... O que é armazenado neste campo? Por que desta forma? O tamanho é variável?

 

 

Sem normalização sua tarefa será um arduo inferno... o correto seria:

 

#tabela_produtos

id | nome | preco

5 | produto teste |33.00

 

 

#tabela_produtos_cores

id | cor

5 | 3

5 | 8

 

 

e na hora da consulta bastaria fazer um join

Select * from tabelas_produtos_cores c, tabela_produtos p
where c.id = p.id
and c.cor in (1,3,5)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts, ai ferra, o banco de dados não é meu...

Pensei em uma solução, mas não sei como aplicar, veja se conseguem me ajudar ou me dar uma luz:

Como são poucas opções de cores que pode ser escolhida (5), eu poderia fazer um SELECT assim

WHERE cor = '1' OR cor = '3'

Eu até montei o PHP que pega e separa a array da escolha do usuario, só não sei como fazer para saber se um numero está dentro de uma coluna do MYSQL que pode conter outros numeros (1,3,5,7), sei que não é apenas =, né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc poderia usar o like, já que sao apenas 5 cores

select * from tabela where cor like '%3%'

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

 

Porem essa alternativa traz valores como 31,213, ou qualquer coisa q contenha um '3'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Praise, por sorte o banco de dados do tava bem mal feito, então os IDs eram separados por vírgula e até o último número tinha vírgula (1,3,4,)

Então peguei sua a ajuda e fiz assim:

select * from tabela where cor like '%3,%'

Valeu! Sei que é uma gambiarra danada, mas eu não tinha como corrigir o banco de dados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gambiarra suja estilo ThunderCat! rs

 

Fico grato em poder ter ajudado :)

 

Um comentario é que se vc usar

select * from tabela where cor like '%3,%'

e o campo for apenas '3' ou o '3' for o ultimo,e portanto sem virgula atras, nao vai voltar nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quantos registros tem nesta tabela? Existe uma outra tabela que armazena o número das cores?

 

Está sofrendo para conseguir o resultado?

 

O que acha de normalizar ao menos esta consulta, para abrir portas?

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.