Ir para conteúdo

Arquivado

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

patrick848

UPDATE com SET variável

Recommended Posts

Olá,
Estou com um problema em relação ao UPDATE, a questão é a seguinte eu preciso com que ele pegue os dados como matricula e data em uma tabela e leva para outra tabela porém ele pega somente o primeiro registro da data e insere em todas as outras.

No banco está da seguinte forma

Tabela --> lista_mensal

mat | data_prev

20 2015-03-01
22 2015-03-02


Ele devia pega os dados desta tabela e leva para esta inserindo os dados assim

Tabela -> funcionarios
matricula | ultimo_mes

20 2015-03-01
22 2015-03-02

porém ele inserindo assim

Tabela -> funcionarios
matricula | ultimo_mes

20 2015-03-01
22 2015-03-01

Perceba que ele inseri as datas iguais, abaixo segue o código.

include('cfg/conecta.php');
/* FIM CONEXÃO */

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());
$buscadata = [];
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$buscadata[] = $row1['data_prev'];
$matricula[] = $row1['mat'];
}

$pegatemp = "select * from pci_funcionarios WHERE cargo = '54'";
$sqlcheckn = mysql_query($pegatemp) or die(mysql_error());
while ($row = mysql_fetch_array($sqlcheckn)) {
$altera = mysql_query("UPDATE pci_funcionarios SET ultimo_mes = '" . implode( ',', $buscadata ) . ")' WHERE matricula IN(" . implode( ',', $matricula ) . ")") or die (mysql_error());
}

Acredito que o problema deva estar na linha 23.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu faria o seguinte: Faria a atualização da segunda tabela dentro do while da primeira,assim:

include('cfg/conecta.php');
/* FIM CONEXÃO */

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());
$buscadata = [];
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$buscadata[] = $row1['data_prev'];
$matricula[] = $row1['mat'];

 

AQUI EU COLOCARIA O CÓDIGO PARA FAZER UPDATE NA SEGUNDA TABELA (pelo que pude perceber a atualização da data na segunda tabela é feita pela matricula ok?

 

}

Faça assim que acredito que funcionará.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu faria o seguinte: Faria a atualização da segunda tabela dentro do while da primeira,assim:

include('cfg/conecta.php');

/* FIM CONEXÃO */

 

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());

$buscadata = [];

$matricula = [];

while ($row1 = mysql_fetch_array($busca1)) {

$buscadata[] = $row1['data_prev'];

$matricula[] = $row1['mat'];

 

AQUI EU COLOCARIA O CÓDIGO PARA FAZER UPDATE NA SEGUNDA TABELA (pelo que pude perceber a atualização da data na segunda tabela é feita pela matricula ok?

 

}

Faça assim que acredito que funcionará.

Então, ele continua pegando somente o primeiro resultado da $buscadata e inserindo em todas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, você quer atualizar usando o campo "mat". Cada valor de "mat" terá um valor diferente para "data_prev". Logo, deve haver um UPDATE específico para cada ítem do array $matriculas.

 

Seu segundo SELECT não está sendo usado. $row não é usada em lugar algum do loop.

você não precisa desse segundo select. Basta iterar sobre o array $matriculas e usar o campo "mat" corrente para realizar o update

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, você quer atualizar usando o campo "mat". Cada valor de "mat" terá um valor diferente para "data_prev". Logo, deve haver um UPDATE específico para cada ítem do array $matriculas.

 

Seu segundo SELECT não está sendo usado. $row não é usada em lugar algum do loop.

você não precisa desse segundo select. Basta iterar sobre o array $matriculas e usar o campo "mat" corrente para realizar o update

Então Beraldo como ficaria o código? Sou iniciante em php D:

Atualmente o código está assim:

include('cfg/conecta.php');
/* FIM CONEXÃO */

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());
// $buscadata = [];
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$buscadata = $row1['data_prev'];
$matricula[] = $row1['mat'];
$altera = mysql_query("UPDATE pci_funcionarios SET ultimo_mes = '" . $buscadata . "' WHERE matricula IN(" . implode( ',', $matricula ) . ")") or die (mysql_error());
}

Já tentei usar assim:

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());
$buscadata = [];
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$buscadata[] = $row1['data_prev'];
$matricula[] = $row1['mat'];
$altera = mysql_query("UPDATE pci_funcionarios SET ultimo_mes = '" . implode( ',', $buscadata ) . "' WHERE matricula IN(" . implode( ',', $matricula ) . ")") or die (mysql_error());
}
?>

E também não deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fizer o update no mesmo loop, nem precisa salvar os números em arrays, pois eles serão usados apenas nesse bloco.

Faça assim:

$busca1 = mysql_query('select * from lista_mensal') or die(mysql_error());
while ($row1 = mysql_fetch_array($busca1))
{
    $buscadata = $row1['data_prev'];
    $matricula = $row1['mat'];
 
    $altera = mysql_query("UPDATE pci_funcionarios SET ultimo_mes = '" . $buscadata . "' WHERE matricula = " . $matricula) or die (mysql_error());
}


Não precisa do IN, pois só terá um id

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.