CONSULTA MYSQL

MLALEX 06/04/2015 14:13:20
#445737
Olá pessoal!!

Sei como fazer uma consulta MySQL excluindo determinadas informações, se eu já tiver o que eu quero excluir. Ex:

SELECT * FROM BDCidades where Cidade <> [Ô]São Paulo[Ô] and Cidade <> [Ô]Rio de Janeiro[Ô] 


Mas como fazer essa consulta se eu quiser excluir uma lista de cidades variadas com quantidade variada??
NILSONTRES 06/04/2015 14:46:25
#445741
imegine que essa informação estivesse em um textbox

SELECT * FROM BDCidades where Cidade <> [ô][Ô] & São Paulo & [Ô][ô] and Cidade <> [ô][Ô] & Rio de Janeiro &[Ô][ô]



FOXMAN 06/04/2015 17:20:28
#445750
Resposta escolhida
Apesar de mudar pouco vc pode passar seu critério em uma string tipo : [Ô]São Paulo[Ô],[Ô]Belo Horizonte[Ô],[Ô]Rio de Janeiro[Ô],[Ô]Curitiba[Ô],[Ô]Santos[Ô],[Ô]Porto Alegre[Ô]
SELECT * FROM BDCidades where Cidade not in([ô]São Paulo[ô],[ô]Belo Horizonte[ô],[ô]Rio de Janeiro[ô],[ô]Curitiba[ô],[ô]Santos[ô],[ô]Porto Alegre[ô])

ou Ainda :

SELECT * FROM BDCidades where Cidade not in(select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade)

Talvez ajude.....
MLALEX 06/04/2015 20:39:55
#445755
VALEEEEUUU! Agradeço muito aos dois. Vou ficar com a sugestão do FOXMAN por já ter iniciado uma pesquisa nesse sentido. Faltava o [Ô]group by campocidade[Ô] no meu código.

SELECT * FROM BDCidades where Cidade not in(select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade)
MLALEX 08/04/2015 12:12:30
#445805
Oi pessoal!! Fui obrigado a reativar o tópico pois o recurso que usei (SELECT * FROM BDCidades where Cidade not in(select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade)) funcionou mas meu servidor avisou que as consultas estão consumindo muito recurso e não poderão continuar.

Pensei, então, vou fazer uma consulta antes das cidades em questão (select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade) e jogar o resultado em um textbox e depois faço outra consulta usando o textbox veja o código abaixo, mas isso não está dando certo:

ALTER DEFINER='iluminacaopubl'@'%' PROCEDURE 'CarregarCidadesCExcessoes'( in varTextBox text)
SELECT * FROM BandoDeDados where Cidade NOT IN (varTextBox) group by 'Cidade'


Acho que o problema está na forma que a string está sendo montada no textbox. Tentei:

cidade1, cidade2, cidade3
[Ô]cidade1[Ô],[Ô]cidade2[Ô],[Ô]cidade3[Ô]
[ô]cidade1[ô], [ô]cidade2[ô]

Nada disso funcionou

Como fazer isso da forma correta?


FOXMAN 08/04/2015 16:47:28
#445813
Citação:

:
Oi pessoal!! Fui obrigado a reativar o tópico pois o recurso que usei (SELECT * FROM BDCidades where Cidade not in(select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade)) funcionou mas meu servidor avisou que as consultas estão consumindo muito recurso e não poderão continuar.

Pensei, então, vou fazer uma consulta antes das cidades em questão (select campocidade from tabelax where [Ô]algum critério[Ô] group by campocidade) e jogar o resultado em um textbox e depois faço outra consulta usando o textbox veja o código abaixo, mas isso não está dando certo:

ALTER DEFINER='iluminacaopubl'@'%' PROCEDURE 'CarregarCidadesCExcessoes'( in varTextBox text)
SELECT * FROM BandoDeDados where Cidade NOT IN (varTextBox) group by 'Cidade'


Acho que o problema está na forma que a string está sendo montada no textbox. Tentei:

cidade1, cidade2, cidade3
[Ô]cidade1[Ô],[Ô]cidade2[Ô],[Ô]cidade3[Ô]
[ô]cidade1[ô], [ô]cidade2[ô]

Nada disso funcionou

Como fazer isso da forma correta?




Então troque o NOT IN pela função NOT_IN_SET

Na sua SP coloque o seguinte código :

SELECT * FROM BandoDeDados where FIND_IN_SET(Cidade , varTextBox) = 0


O parametro deve ser passado da seguinte maneira :

[ô]Curitiba,barretos,são paulo[ô]

Ficando em um exmplo bem simples da seguinte maneira :

CALL 'CarregarCidadesCExcessoes'([ô]Curitiba,barretos,são paulo[ô]);


MLALEX 08/04/2015 20:30:26
#445818
FOXMAN Deus que abençoe seu conhecimento e sua boa vontade em ajudar. Foi perfeita sua explicação. MUITO OBRIGADO!!!
Tópico encerrado , respostas não são mais permitidas