Ir para conteúdo

POWERED BY:

Arquivado

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

Walter Chilomer

Operador 'LIKE' só funciona em SELECT ?

Recommended Posts

Galera,

Tenho a seguinte tabela:

tab_comprar

Registro 1 - pedido_int = 102555

Registro 2 - pedido_int = 102555

Registro 3 - pedido_int = 102666

Registro 4 - pedido_int = 102666

 

Dando um SELECT:

Sendo que $cod_compra = 102666

$sql = "SELECT * FROM tab_comprar WHERE pedido_int like '$cod_compra'";

 

Executando o select acima mostra sómente os Registros 3 e 4. PERFEITO - É isso que eu quero.

 

Porém, tentando gravar apenas os Registros 3 e 4, grava todos os registros:

 

$sql = "create table t_comprar SELECT * FROM tab_comprar WHERE cs_pedido_int like '$cod_compra'";

 

Já tentei:

like '$cod_compra%'

like '%$cod_compra%'

Continua gravando todos os registros.

 

Só para ilustrar, o comando abaixo funciona perfeitamente bem:

$Soma_total = mysql_query("SELECT sum(cs_val_unit*em_quanti) FROM tab_comprar WHERE cs_pedido_int like '$cod_compra%'");

 

Então, alguém consegue dar uma luzinha? Eu quero gravar na tabela sómente os registros repetidos, não importando se 2, 5 ou 10 registros repetidos.

 

Fiquem bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Tanto no BD como em produção o SELECT com LIKE, funcionam numa boa.

Porém com INSERT, não funciona nem no BD ou em produção, ou seja, grava todos os registros.

Inclusive o script abaixo é o que eu usaria para resolver meu problema:

$res = mysql_query ("INSERT INTO tab_compras SELECT * FROM tab_comprar WHERE (cs_pedido_int LIKE '$cod_compra%')");

Mas grava todos os registros e não somente os que eu seleciono.

Obrigado pela ajuda.

Fique bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema deve ser na aplicação na passagem de $cod_compra% no caso do INSERT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO tab_compras SELECT * FROM tab_comprar WHERE (cs_pedido_int LIKE '%102666%')

 

1 Assim funciona ?

 

2 A tab_compras fica vazia antes do insert ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

1 - Não funciona. Já testei. Entenda que o numeral 102666 é igual a '$cod_compra'. É esta variável que tenho que usar.

2- A tab_compras está cheia, tem mais de 2000 registros. Cada registro tem 27 campos.

A cada pedido criado (cod_compra = cs_pedido_int) pode ter de um a 5 ou 8 registros, com cada ID +1 (auto increment). O ID é PK e o cs_pedido_int é indexado.

Vou tentar usar um FOR WHILE no INSERT, ou mudar a lógica da coisa.

Bom, obrigado pela ajuda.

Fique bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hinom,

 

Testei mas não funciona.

 

Testei também usando operador de string REGEXP (RLIKE), mas também não funciona.

 

Resolvi o problema, mudando a lógica do sistema.

 

Criei uma tabela auxiliar com apenas um campo cs_ID, AI, PK, onde gravo meus numeros geradores de numero de pedido;

 

Na tabela compras adicionei um campo char (cs_situa) onde gravo a informação se o pedido de compra está em aberto ou não;

 

Quando confirmo o pedido de compra faço um update na tabela compras:

 

$sql = "UPDATE tab_compras SET cs_situa='CONFIRMADO' WHERE cs_pedido_int LIKE '$id_pedido%'";

 

O comando update aceita o operador like, numa boa.

 

RESOLVIDO

 

Seto todos os registros de uma compra como confirmado e ao chegar o material comprado atualizo este pedido abrindo uma registro no contas a pagar com o numero do pedido de compra, mais o numero da nota fiscal, vencimento da fatura, etc...

 

Obrigado a todos pela ajuda.

 

Fiquem bem.

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.