Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

29-04-2013 10:03

Preciso fazer um insert partindo de uma consulta, seriam vários inserts de uma vez :

<?php       $PDO = new PDO( 'mysql:host=localhost;dbname=contest', 'root', '' );       $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );       $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );       $Query = $PDO->query( "SELECT da_dia, prod_dia, SUM(sa_dia) AS 'sa' , SUM(custo_dia) AS 'custo' , SUM(ven_dia) AS 'ven' , SUM(crt_dia) AS 'crt', SUM(tot_dia) AS 'tot' FROM diadia GROUP BY prod_dia ORDER BY prod_dia" )->fetchAll();       for( $i = 0; $i < sizeOf( $Query ); ++$i ){            foreach( $Query[ $i ] as $index => $data ){                $value[ $i ][] = !is_numeric( $data ) ?  sprintf( "'%s'", $data ) : sprintf( '%d', $data );            }            $value[ $i ][] = '';       }            for( $x = 0; $x < sizeOf( $value ); ++$x ){            $values[] = sprintf( '(%s)', implode( ',', $value[ $x ] ) );       }       $Insert = sprintf( "INSERT INTO '%s'( 'campos' ) VALUES %s", 'diames', implode( ', ', $values ) );            echo $Insert;   ?>

resultado do echo:

INSERT INTO 'diames'( 'campos' ) VALUES ('2013-04-29',101013,3,1,2,1,2,), ('2013-04-29',101033,3,1,2,1,2,), ('2013-04-29',101042,2,0,1,0,1,), ('2013-04-29',101321,9,1,2,5,11,), ........  ('2013-04-29',139993,1,5,10,5,10,

observações de erros deste insert:
1 - os 4 últimos itens são decimais
2 - esta sobrando uma vírgula após o último item
3 - não esta fechando o último insert

não esta fazendo o insert na tabela.
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

29-04-2013 12:30

Consegui inserir desta forma :

$query=mysql_query("SELECT da_dia, prod_dia, SUM(sa_dia) AS 'sa' , SUM(custo_dia) AS 'custo' , SUM(ven_dia) AS 'ven' , SUM(crt_dia) AS 'crt', SUM(tot_dia) AS 'tot' FROM diadia GROUP BY prod_dia ORDER BY prod_dia "); $sql = "INSERT INTO diames ( da_dia, prod_dia, sa_dia, custo_dia, ven_dia, crt_dia, tot_dia ) VALUES"; while($row = mysql_fetch_assoc($query)) { $da_dia= $row["da_dia"]; $prod_dia =$row["prod_dia"]; $sa =$row["sa"]; $custo= $row["custo"]; $ven= $row["ven"]; $crt =$row["crt"]; $tot =$row["tot"]; $sql .= "( '$da_dia', '$prod_dia', '$sa', '$custo', '$ven', '$crt', '$tot' ),"; } $sql = substr($sql, 0, -1); $result = mysql_query($sql) or die(mysql_error());       echo $sql;  

reslutado :

INSERT INTO diames ( da_dia, prod_dia, sa_dia, custo_dia, ven_dia, crt_dia, tot_dia ) VALUES( '2013-04-29', '101013', '3', '1.47', '2.70', '1.47', '2.70' ),( '2013-04-29', '101033', '3', '1.32', '2.70', '1.32', '2.70' ),( '2013-04-29', '101042', '2', '0.98', '1.80', '0.98', '1.80' ),( '2013-04-29', '101321', '9', '1.32', '2.60', '5.94', '11.70' ),( '2013-04-29', '102041', '1', '8.47', '15.90', '8.47', '15.90' ), ......

Agora a luta vai ser fazer o update dentro do mes , agradeço qualquer ajuda .
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Insert de vários registros do select

29-04-2013 13:59

Se for fazer o update de várias linhas ao mesmo tempo, vai ter que trabalhar com array, pegando o id da linha e os outros dados.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

29-04-2013 15:35

Indo no mesmo pensamento do insert , esta assim .....

$query2=mysql_query("SELECT * FROM diadia GROUP BY prod_dia ORDER BY prod_dia ") or die(mysql_error()); $row2 = mysql_fetch_assoc($query2); $da_dia = $row2['da_dia']; $datames = explode("-",$da_dia); $mes = $datames[1]; $ano = $datames[0]; $que = mysql_query("SELECT * FROM diames WHERE MONTH(da_mes) = '$mes' AND YEAR(da_mes) = '$ano' ") or die(mysql_error()); $cont = mysql_num_rows($que); if ( $cont > 0) { $query=mysql_query("SELECT da_dia, prod_dia, SUM(sa_dia) AS 'sa' , SUM(custo_dia) AS 'custo' , SUM(ven_dia) AS 'ven' , SUM(crt_dia) AS 'crt', SUM(tot_dia) AS 'tot' FROM diadia GROUP BY prod_dia ORDER BY prod_dia ") or die(mysql_error());      $sql = "UPDATE diames SET "; while($row = mysql_fetch_assoc($query)) { $da_dia= $row["da_dia"]; $prod_dia =$row["prod_dia"]; $sa =$row["sa"]; $custo= $row["custo"]; $ven= $row["ven"]; $crt =$row["crt"]; $tot =$row["tot"]; $sql .= "( sa_mes = sa_mes + $sa , custo_mes= custo_mes + $custo , ven_mes= ven_mes + $ven , crt_mes= crt_mes + $crt , tot_mes= tot_mes + $tot WHERE prod_mes = '$prod_dia'  ),"; } $sql = substr($sql, 0, -1); $result = mysql_query($sql) or die(mysql_error()); } else { 

resultado:

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 '( sa_mes = sa_mes + 3 , custo_mes= custo_mes + 1.47 , ven_mes= ven_mes + 2.70 , ' at line 1

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Insert de vários registros do select

29-04-2013 15:48

A sintaxe no UPDATE é diferente.

UPDATE tabela SET   coluna='valor', coluna2='outrovalor'   WHERE....

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

29-04-2013 16:03

Sim , mas eu to precisando pegar o valor antigo e somar a um valor novo ... e é isso que não ta indo ...
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Insert de vários registros do select

29-04-2013 16:09

Tira os parenteses, do início e do final. Se mesmo assim não for, separe o novo valor com aspas

sa_mes = sa_mes + '$sa' 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

29-04-2013 16:41


if ( $cont > 0) { $query=mysql_query("SELECT da_dia, prod_dia, SUM(sa_dia) AS 'sa' , SUM(custo_dia) AS 'custo' , SUM(ven_dia) AS 'ven' , SUM(crt_dia) AS 'crt', SUM(tot_dia) AS 'tot' FROM diadia GROUP BY prod_dia ORDER BY prod_dia ") or die(mysql_error());      //$sql = "UPDATE diames SET "; while($dad = mysql_fetch_assoc($query)) { $da_dia= $dad["da_dia"]; $prod_dia =$dad["prod_dia"]; $sa =$dad["sa"]; $custo= $dad["custo"]; $ven= $dad["ven"]; $crt =$dad["crt"]; $tot =$dad["tot"]; $sql = "UPDATE diames SET sa_mes=sa_mes + $sa , custo_mes=custo_mes + $custo , ven_mes=ven_mes + $ven , crt_mes=crt_mes + $crt , tot_mes=tot_mes + $tot WHERE prod_mes = '$prod_dia',"; } $sql = substr($sql, 0, -1); $result = mysql_query($sql) or die(mysql_error()); echo $sql; } else {  

retorno:

UPDATE diames SET sa_mes=sa_mes + 2 , custo_mes=custo_mes + 2.00 , ven_mes=ven_mes + 2.00 , crt_mes=crt_mes + 2.00 , tot_mes=tot_mes + 2.00 WHERE prod_mes = '999999'

porém só altera a última linha.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Insert de vários registros do select

29-04-2013 16:59

Testa esse exemplo abaixo, e adapta ao seu

<?php if(isset($_POST['submit'])) { extract($_POST); for($i = 0; $i < count($id); $i++) { echo "UPDATE tabela SET coluna1='{$nome[$i]}', coluna2='$idade[$i]' WHERE id='{$id[$i]}<br />'"; } } ?> <form action="teste.php" method="post"> <input type="text" name="id[]" value="1"> <input type="text" name="nome[]" value="abcd"> <input type="text" name="idade[]" value="45"> <br /> <input type="text" name="id[]" value="2"> <input type="text" name="nome[]" value="efgh"> <input type="text" name="idade[]" value="46"> <br /> <input type="submit" name="submit"> </form>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 411
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Insert de vários registros do select

30-04-2013 17:47

Mudei a estratégia, listei os campos em input , após o cadastro , ja faz tudo que preciso com faço o INSERT e caso precise faz ON DUPLICATE KEY UPDATE .

$data1 = $_POST["data1"]; $data2 = $_POST["data2"]; $data 3= $_POST["data3"]; $tam = count($prod_dia)-1; for($f=0; $f<=$tam; $f++){     $sql = mysql_query("INSERT INTO tabela1 ...... ON DUPLICATE KEY UPDATE ....") or die(mysql_error());     $sql2 = mysql_query("INSERT INTO tabela2 .....  ON DUPLICATE KEY UPDATE .....") or die(mysql_error());     } 

Obrigado !
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Insert de vários registros do select

30-04-2013 18:47

Boa.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado