Ir para conteúdo

POWERED BY:

Arquivado

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

filipecrosk

Meu Select * from tabela where campo IN () nao esta funfando

Recommended Posts

Ai galera....

 

olha que coisa basica...

 

Tenho um sisteminha aqui de intranet que a galera manda msg para o povão... ai é inserido no banco um registro com os seguintes campos:

 

De (id de quem enviou)

para (id de todos que vão receber, fica separado por virgula, ex: 49,53,58,35,21)

titulo (titulo da mensagem)

texto (texto da mensagem)

 

Ai quando o usuário acessa é feito a seguinte pesquisa:

 

strq = "SELECT * FROM arquivos where para IN ("& session("id")&") ORDER BY id DESC

sendo que session("id") vai retornar o ID do usuário logado

 

ex:

strq = "SELECT * FROM arquivos where para IN (38) ORDER BY id DESC

Mas só que esta dando erro http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

Eu tenho um registro por exemplo que no campo PARA esta o seguinte valor: 52, 49, 40, 36, 34, 54, 51, 39, 38, 33

 

E daí quando entro com o usuário 52 ele acha esse registro... mas se entro com o 38 ele não acha.. =(

 

alguem sabe ai como fazer funcionar isso?? OU se tem outra forma de fazer isso funcionar???

Ah e não posso fazer com LIKE porque se o usuário 1 entrar ele vai ver as msgs do usuário 10,11,12,13 etc...

 

 

Abração http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Filipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

tira os espaços antes e depois da virgulao valor deve estar exatamente entre as virgulasassim o 52 ele acha mesmo pois não tem espaço antes ja os outros voce colocou um espaço que faz com que o valor indicado não exista

Compartilhar este post


Link para o post
Compartilhar em outros sites

OH cara ate funcionou aqui... valeus

 

 

mas só funciona quando procuro com mais de um valor..

exemplo:

SELECT * FROM arquivos where para IN (40,38,52)

mas se procuro com apenas um valor não funciona... exemplo:

SELECT * FROM arquivos where para IN (38)

sabe o porque??

Compartilhar este post


Link para o post
Compartilhar em outros sites

access você usa???? mas tecnicamente deveria funcionar... pelo menos em sql server e oracle funfa... mas a gambiarra sempre é bem vinda

 

SELECT * FROM arquivos where para IN (0,40,38,52,0)SELECT * FROM arquivos where para IN (0,38,0)

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

era para funcionar mesmoo que tem no seu db neste teste que voce fez com o 38???

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha a estrutura do meu banco e os 2 registros de teste que tem nele...

 

CREATE TABLE `arquivos` (  `Id` int(11) NOT NULL auto_increment,  `de` text,  `para` text,  `nome` text,  `arquivo` text,  `descricao` longtext,  `ip` text,  `data` text,  PRIMARY KEY  (`Id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table arquivos#INSERT INTO `arquivos` VALUES (9,'40','40','','Resenha_Pagina_13.doc','','127.0.0.1','20/4/2006 12:20:11');INSERT INTO `arquivos` VALUES (10,'40','52,49,40,36,34,54,51,39,38,33','','joia.gif','','127.0.0.1','4/5/2006 09:03:13');

ps: exportei isso do meu BD aqui só para mostrar...se não der para entender dá um toque aí que explico melhor...

valeus http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

caramba!!!

 

achei o seu problema....

 

fiz um teste aki.. com um campo INT.. e funciona o IN() corretamente... mas em campos de TEXT ele não funciona... você não deveria usar o campo TEXT para este tipo de campo... caso todos os campos for numérico, você usa o INT... ou caso tenha algumas letras... você deveria usar o VARCHAR e buscar usando aspas simples.... como no exemplo, beleza?

select *from t001where para in('2') -- campo para é um VARCHAR

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

CAra, to chegando agora mas imagino que seu problema é porque o "para" é que deve ficar DEPOIS do in:

 

tipo, troca:

strq = "SELECT * FROM arquivos where para IN ("& session("id")&") ORDER BY id DESC
Por:

strq = "SELECT * FROM arquivos where ("& session("id") & ") IN para ORDER BY id DESC

Pois é o "para" que contém vários campos a serem pesquisados.

 

Ou então tenta algo como:

strq = "SELECT * FROM arquivos where para LIKE '% "& session("id") & ",%' ORDER BY id DESC

Se tiver usando access tenta:

strq = "SELECT * FROM arquivos where para LIKE '* "& session("id") & ",*' ORDER BY id DESC

Não sei se entendi direito. Té mais...

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.