Ir para conteúdo

POWERED BY:

Arquivado

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

elitediego

[Resolvido] insert com select pelo php no mysql

Recommended Posts

olá galera, gostaria de saber o que há de errado com a minha query, está apresentando o seguinte erro:

 

#1064 - 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 '11%')', 'framed-pool', '=', 'pool_bloqueado')' at line 1

 

 

INSERT INTO `radius`.`radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES (NULL, '(SELECT id_cliente
FROM netway2.santander_boletoGerado
WHERE (
TO_DAYS( now( ) ) 
) - TO_DAYS( dt_vencimento ) >=10
AND STATUS =0
AND id_cliente NOT LIKE'11%')', 'framed-pool', '=', 'pool_bloqueado')

 

Eu estou executando a query pelo php por isso postei nesse forum...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para inserir assim, não tem o 'values' porque na tua forma, você não limita os resultados, veja um exemplo:

C:\Users\Andrey>cd ..

C:\Users>cd ..

C:\>cd \dev\mysql\bin\

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use ex;
Database changed
mysql> show tables;
+--------------+
| Tables_in_ex |
+--------------+
| teste        |
| teste1       |
| teste2       |
+--------------+
3 rows in set (0.11 sec)

mysql> insert into teste values( 1 ), ( 2 ), ( 3 ), ( 4 );
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> insert into teste2( `id` ) select id from teste where id > 0;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from teste2;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

 

Agora continuando, veja bem:

mysql> alter table teste2 add cln varchar( 20 ) not null;
Query OK, 4 rows affected (0.22 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> describe teste2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| cln   | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.09 sec)

mysql> insert into teste2( `id`, `cln` ) values( select id from teste where id > 0, 'abc' );
ERROR 1064 (42000): 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 'select id from teste where id > 0, 'abc' )' at line 1

mysql> insert into teste2( `id`, `cln` ) select id from teste where id > 0, 'das';
ERROR 1064 (42000): 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 ' 'das'' at line 1

mysql> insert into teste2( `id`, `cln` ) values( (select id from teste where id > 0), 123 );
ERROR 1242 (21000): Subquery returns more than 1 row

mysql> insert into teste2( `id`, `cln` ) values( (select id from teste where id > 0 LIMIT 1), 123 );
Query OK, 1 row affected (0.00 sec)

mysql> select * from teste2;
+----+-----+
| id | cln |
+----+-----+
|  1 |     |
|  2 |     |
|  3 |     |
|  4 |     |
|  1 | 123 |
+----+-----+
5 rows in set (0.00 sec)

 

Teu problema são as aspas, creio que no 'LIKE', tente fazer sua SQL assim:

INSERT INTO `radius`.`radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES (NULL, (SELECT id_cliente
FROM netway2.santander_boletoGerado WHERE ( TO_DAYS( now() ) ) - TO_DAYS( dt_vencimento ) >= 10 AND STATUS =0
AND `id_cliente` NOT LIKE '11%' LIMIT 1 ), 'framed-pool', '=', 'pool_bloqueado' )

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabei de testar só qe ta inserindo apenas uma linha ao invés de varias..

 

No meu caso era pra inserir 915 registros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, você notou em cada exemplo que te dei ? e sobre os 'values' ?

 

eu usei o sql como você me indicou e só insere uma linha, e tambem tentei inserir assim:

INSERT INTO `radius`.`radreply` VALUES (NULL, (SELECT id_cliente
FROM netway2.santander_boletoGerado WHERE ( TO_DAYS( now() ) ) - TO_DAYS( dt_vencimento ) >= 10 AND STATUS =0
AND `id_cliente` NOT LIKE '11%' LIMIT 1 ), 'framed-pool', '=', 'pool_bloqueado' )

e tam bem num foi

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, eu acho que você ainda não está entendendo, não tem como você inserir tudo dessa maneira somente pelo SQL.

se você quer inserir os valores de outra tabela, tem como você fazer no PHP. você lê toda a tabela faz suas condições

então os resultados dessa tabela, você vai guardar em um array, aí sim você monta teu 'insert' com um implode ..

 

o teu problema é o seguinte, pra você inserir os valores de outra tabela no INSERT, tem como você fazer

se for todos os registros, mais aí os outros valores pra outros campos não serão adicionados, então você pode fazer um 'default' nos outros campos

com esses outros valores, ai você apenas insere o que está na outra tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, eu acho que você ainda não está entendendo, não tem como você inserir tudo dessa maneira somente pelo SQL.

se você quer inserir os valores de outra tabela, tem como você fazer no PHP. você lê toda a tabela faz suas condições

então os resultados dessa tabela, você vai guardar em um array, aí sim você monta teu 'insert' com um implode ..

 

o teu problema é o seguinte, pra você inserir os valores de outra tabela no INSERT, tem como você fazer

se for todos os registros, mais aí os outros valores pra outros campos não serão adicionados, então você pode fazer um 'default' nos outros campos

com esses outros valores, ai você apenas insere o que está na outra tabela.

 

eu acredito q entendi , só tem como inserir tudo se for pelo mysql puro sem o sus do phpmyadmin por exemplo ou então eu defino o s valores q são fixos por defaul e insiro apenas o id_cliente.

Agora o que eu num entendi eé como eu faria isso pelo php porque o q eu qero é inserir dados de uma consulta de uma base de dados para outra base de dados.

 

 

Agora uma pergunta seria possivel eu montar o sql dessa maneira?

 

SELECT id_cliente FROM netway2.santander_boletoGerado WHERE  (TO_DAYS(now()) - TO_DAYS(dt_vencimento)) >= 10  AND status =0 AND id_cliente LIKE '01%' ORDER BY id_cliente
INTO radius.radreply (null,'id_cliente','framed-pool','=','pool-bloqueado')

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acredito q entendi , só tem como inserir tudo se for pelo mysql puro sem o sus do phpmyadmin por exemplo ou então eu defino o s valores q são fixos por defaul e insiro apenas o id_cliente.

 

Cara, o que você falou não tem nada haver, o MySQL é um só.

o phpMyAdmin, é somente uma ferramenta pra manipular esse banco de dados.

 

No PHP, você faz dessa forma:

<?php
     $PDO = new PDO( 'mysql:host=localhost;dbname=ex', 'root', 'tua senha' );
     $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
     $Query = $PDO->query( 'SELECT * FROM `teste2`' )->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 ][] = "'Campo adicional'";
          $value[ $i ][] = "'outro campo'";
          $value[ $i ][] = "'outro outro campo'";
     }     
     for( $x = 0; $x < sizeOf( $value ); ++$x ){
          $values[] = sprintf( '(%s)', implode( ',', $value[ $x ] ) );
     }
     $Insert = sprintf( 'INSERT INTO `%s`( `campos` ) VALUES %s', 'tabela', implode( ', ', $values ) );
     echo $Insert;       

 

Saída:

INSERT INTO `tabela`( `campos` ) VALUES 
(1,'','Campo adicional','outro campo','outro outro campo'), 
(2,'','Campo adicional','outro campo','outro outro campo'), 
(3,'','Campo adicional','outro campo','outro outro campo'),
(4,'','Campo adicional','outro campo','outro outro campo'), 
(1,123,'Campo adicional','outro campo','outro outro campo')

 

Perceba que a cada linha encontrada na tabela, os valores adicionais se repetem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente executar.

INSERT INTO `radius`.`radreply` (`id`, `username`, `attribute`, `op`, `value`) 
SELECT NULL, id_cliente, 'framed-pool', '=', 'pool_bloqueado'
FROM `netway2`.`santander_boletoGerado`
WHERE 
   ( TO_DAYS( NOW( ) ) - TO_DAYS( dt_vencimento ) ) >= 10
   AND STATUS = 0
   AND id_cliente NOT LIKE '11%'

 

Informe se ocorreu algum erro.

 

 

INSERT ... SELECT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente executar.

INSERT INTO `radius`.`radreply` (`id`, `username`, `attribute`, `op`, `value`) 
SELECT NULL, id_cliente, 'framed-pool', '=', 'pool_bloqueado'
FROM `netway2`.`santander_boletoGerado`
WHERE 
   ( TO_DAYS( NOW( ) ) - TO_DAYS( dt_vencimento ) ) >= 10
   AND STATUS = 0
   AND id_cliente NOT LIKE '11%'

 

Informe se ocorreu algum erro.

Kara com certeza eu vo ficar te devendo essa funcionou perfeitamente!!!!

Walew mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arrebentou a boca do balão hein Carlos !!

Eu não tinha olhado a documentação, .. eu já fiz inserts assim, mais não sabia que dava pra fazer

dessa maneira, testei aqui agora hehe, bem legal:

C:\Users\Andrey>cd ..

C:\Users>cd ..

C:\>cd \dev\mysql\bin\

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use ex;
Database changed
mysql> show tables;
+--------------+
| Tables_in_ex |
+--------------+
| teste        |
| teste1       |
| teste2       |
+--------------+
3 rows in set (0.03 sec)

mysql> select * from teste;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

mysql> select * from teste1;
Empty set (0.02 sec)

mysql> select * from teste2;
+----+-----+
| id | cln |
+----+-----+
|  1 |     |
|  2 |     |
|  3 |     |
|  4 |     |
|  1 | 123 |
+----+-----+
5 rows in set (0.00 sec)

mysql> insert into teste2( id, cln ) select id, 'teste' from teste;
Query OK, 4 rows affected (0.04 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from teste2;
+----+-------+
| id | cln   |
+----+-------+
|  1 |       |
|  2 |       |
|  3 |       |
|  4 |       |
|  1 | 123   |
|  1 | teste |
|  2 | teste |
|  3 | teste |
|  4 | teste |
+----+-------+
9 rows in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arrebentou a boca do balão hein Carlos !!

:lol:

 

Fui descobrir essa funcionalidade a pouco tempo, pois tive que fazer algo parecido :)

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.