como selecionar registros mysql pulando sempre um registro
Boa noite
Meus amigos estou precisando de uma força imensa!
estou precisando saber como eu faço para dar um select no mysql para selecionar os registros sempre pulando um registro.
ex:
[img:descricao=result sql]http://arquivo.devmedia.com.br/forum/imagem/335313-20140109-205029.png[/img]
seguindo a imagem acima gostaria de selecionar ( o id=1 pular o id=2 e selecionar o id=3) e assim por diante
alguem poderia me dar uma solução
Meus amigos estou precisando de uma força imensa!
estou precisando saber como eu faço para dar um select no mysql para selecionar os registros sempre pulando um registro.
ex:
[img:descricao=result sql]http://arquivo.devmedia.com.br/forum/imagem/335313-20140109-205029.png[/img]
seguindo a imagem acima gostaria de selecionar ( o id=1 pular o id=2 e selecionar o id=3) e assim por diante
alguem poderia me dar uma solução
Ronald Santos
Curtidas 0
Melhor post
William
11/01/2014
Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.
Retorna registros com id par
Retorna registros com id ímpar
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0
Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
GOSTEI 1
Mais Respostas
Alex Lekao
09/01/2014
Ola Boa tarde!!!
Excelente a sugestao do Willian!!!
Acredito que a maneira mais pratica de identifcar pares e impares eh com o Resto de divisao!!!
Excelente a sugestao do Willian!!!
Acredito que a maneira mais pratica de identifcar pares e impares eh com o Resto de divisao!!!
GOSTEI 0
Paulo Pontes
09/01/2014
Funciona perfeitamente, o problema é se algum id for excluído. Por exemplo se o id 2 for deletado, a consulta com resto 1 pegará o id 1 e 3. A não ser que garantam que nenhum id desta tabela seja removido.
GOSTEI 0
Alex Lekao
09/01/2014
Entao, nao sei exatamente do que se trata.
Mas eu particularmente nao gosto de exclusao de itens de tabelas.
Acho melhor que se tenha um campo onde vc possa flegar sim ou nao para cancelado, apagado, etc...
eu nao recomendo exclusoes de cadastros, por uma questao de consistencia de dados em caso necessario de relatorios, ou outras coisas.
mas isso vai de analise do banco etc.
Mas eu particularmente nao gosto de exclusao de itens de tabelas.
Acho melhor que se tenha um campo onde vc possa flegar sim ou nao para cancelado, apagado, etc...
eu nao recomendo exclusoes de cadastros, por uma questao de consistencia de dados em caso necessario de relatorios, ou outras coisas.
mas isso vai de analise do banco etc.
GOSTEI 0
William
09/01/2014
Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.
Retorna registros com id par
Retorna registros com id ímpar
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0
Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
Então colega webcodefree, como mencionei na minha resposta "vou supor que a sua tabela possui os IDs todos em sequência", meu código é apenas uma solução alternativa para o problema.
Trabalho diariamente com MySQLe não acredito que exista outra solução, mas estou acompanhando o tópico, quem sabe surge uma solução "mais adequada" a nível de instrução SQL!
GOSTEI 0
Paulo Pontes
09/01/2014
Sim Willian, não fui contrário a sua solução até por que é muito plausível. Talvez seja a única solução mesmo tanto é que reforcei também sobre a chave sequencial. Também não sei a fundo se o MySQL tem como reordenar as chaves através de procedures ou gatilhos. Mas peço desculpas ai se viu meu comentário com maús olhos, não tive a intenção de ir contra seu raciocínio.
GOSTEI 0
William
09/01/2014
Tranquilo colega webcodefree, sem problemas de minha parte!!
Afinal estamos todos no mesmo barco .. rsrsrsrsr
Afinal estamos todos no mesmo barco .. rsrsrsrsr
GOSTEI 0
Ronald Santos
09/01/2014
Muito Obrigado mesmo camarada o seu comando resolveu o meu problema!!!!
Mais eu preciso de mas uma ajuda sua se for possível,
Eu estou precisando fazer um update pegando um valor de uma coluna de uma tabela N para uma coluna de uma tabela X sendo que sendo que o valor que eu irei pegar da tabela N é VARCHAR(255) e eu quero jogar esse valor para a coluna decimal(21,2) da tabela X!
qual a luz que você poderia me dar?
Mais eu preciso de mas uma ajuda sua se for possível,
Eu estou precisando fazer um update pegando um valor de uma coluna de uma tabela N para uma coluna de uma tabela X sendo que sendo que o valor que eu irei pegar da tabela N é VARCHAR(255) e eu quero jogar esse valor para a coluna decimal(21,2) da tabela X!
qual a luz que você poderia me dar?
Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.
Retorna registros com id par
Retorna registros com id ímpar
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0
Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0
Desse modo você consegue pular IDs, veja se atende suas necessidades!!
GOSTEI 0
William
09/01/2014
Uma pergunta, suponho que essa coluna em decimal seja para valores monetários, esses valores em varchar(255) também são monetários?
GOSTEI 0
William
09/01/2014
Uma pergunta, suponho que essa coluna em decimal seja para valores monetários, esses valores em varchar(255) também são monetários?
GOSTEI 0
William
09/01/2014
Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
Observe o exemplo de entrada e saída do valores abaixo.
Qualquer dúvida estou a disposição ...
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
UPDATE TabelaX x SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)
Observe o exemplo de entrada e saída do valores abaixo.
ColunaN - ColunaX VARCHAR(255) - DECIMAL(21,2) 1.123,00 - 1123.00 456,09 - 456.09 4,90 - 4.90 12.000,00 - 12000.00 0,90 - 0.90 11345,90 - 11345.90
Qualquer dúvida estou a disposição ...
GOSTEI 0
Ronald Santos
09/01/2014
Boa noite meu amigo eu irei testar agora o seu comando e ja lhe aviso se funcionou?
Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
Observe o exemplo de entrada e saída do valores abaixo.
Qualquer dúvida estou a disposição ...
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
UPDATE TabelaX x SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)
Observe o exemplo de entrada e saída do valores abaixo.
ColunaN - ColunaX VARCHAR(255) - DECIMAL(21,2) 1.123,00 - 1123.00 456,09 - 456.09 4,90 - 4.90 12.000,00 - 12000.00 0,90 - 0.90 11345,90 - 11345.90
Qualquer dúvida estou a disposição ...
GOSTEI 0
Ronald Santos
09/01/2014
Meu amigo me desculpa a demora para lhe retornar uma resposta
eu testei o comando que vc me passou mais deu erro
acima está o erro que o mysql me retornou!!!
eu testei o comando que vc me passou mais deu erro
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
acima está o erro que o mysql me retornou!!!
Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
Observe o exemplo de entrada e saída do valores abaixo.
Qualquer dúvida estou a disposição ...
Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!
Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.
UPDATE TabelaX x SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)
Observe o exemplo de entrada e saída do valores abaixo.
ColunaN - ColunaX VARCHAR(255) - DECIMAL(21,2) 1.123,00 - 1123.00 456,09 - 456.09 4,90 - 4.90 12.000,00 - 12000.00 0,90 - 0.90 11345,90 - 11345.90
Qualquer dúvida estou a disposição ...
GOSTEI 0
William
09/01/2014
Cole aqui exatamente o mesmo código que você está executando!!!
GOSTEI 0
Ronald Santos
09/01/2014
Meu amigo eu consegui mais com essa comando abaixo.
update reg_c490 x inner join inconsistencia n on x.id = n.id_registro_bd set x.vl_opr = replace(n.valor_esperado_campo, ',', '.') where x.cst_icms = '000';
Cole aqui exatamente o mesmo código que você está executando!!!
GOSTEI 0
William
09/01/2014
Funcionou da maneira como vc precisava?
GOSTEI 0
Ronald Santos
09/01/2014
Sim funcionou
eu já havia tentando com aquele script acima mais não tinha usado o replace e sempre que eu executava ele truncava todos os valores!
quando adicionei o replace funcionou perfeitamente... Muito obrigado pelo a sua ajuda!!!
eu já havia tentando com aquele script acima mais não tinha usado o replace e sempre que eu executava ele truncava todos os valores!
quando adicionei o replace funcionou perfeitamente... Muito obrigado pelo a sua ajuda!!!
Funcionou da maneira como vc precisava?
GOSTEI 0
William
09/01/2014
OK, estou finalizando o tópico!!!
GOSTEI 0