Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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...
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>
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...
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
Deu certinho, obrigado Beraldo.
Cara eu faria o seguinte: Faria a atualização da segunda tabela dentro do while da primeira,assim:
include('cfg/conecta.php');
while ($row1 = mysql_fetch_array($busca1)) {/ FIM CONEXÃO /
Faça assim que acredito que funcionará.