jmlavoier 0 Denunciar post Postado Setembro 14, 2011 Olá bom dia a todos ! Preciso executar vários blocos de comando sql (mysql) em um só @mysql_query. Repare que existe dois blocos anteriores para criação de variaveis. Eu preciso executar o comando desta maneira, em um script só. Só que desta maneira, o mysql_query não funciona. $comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; $rs_teste = @mysql_query($comando,$con_teste); Fiz o teste dest maneira e funcionou corretamente, mas não posso adaptar desse jeito. $comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y')"; @mysql_query($comando,$con_teste); $comando = "SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y')"; @mysql_query($comando,$con_teste); $comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; $rs_teste = @mysql_query($comando,$con_teste); No aguardo de uma solução. Obrigado ! Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Setembro 14, 2011 o que você quer fazer?? falando em português claro Compartilhar este post Link para o post Compartilhar em outros sites
jmlavoier 0 Denunciar post Postado Setembro 14, 2011 Desculpe-me por não ter escrito de forma clara. O problema é, tenho o seguinte script sql. SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE()))); Percebe-se que o script possui três blocos de comando sql, sendo o primeiro bloco de comando: SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); O segundo: SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); E o tereiro bloco é: SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE()))); Eu preciso executar esta consulta no php, mas o mysql_query() parece só executar um bloco por vez, contudo o script não funciona: Exemplo 1 $comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; $rs_teste = @mysql_query($comando,$con_teste); Então eu fiz um teste desta maneira e funcionou: Exemplo 2 $comando1 = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y');"; @mysql_query($comando1,$con_teste); $comando2 = "SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y');"; @mysql_query($comando2,$con_teste); $comando = "SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; $rs_teste = @mysql_query($comando,$con_teste); Mas não posso fazer desta maneira, tenho que arrumar um jeito de fazer esta consulta funcionar em um mysql_query() só, como tentei no exemplo 1, existe alguma forma de fazer isso ? Espero ter conseguido explicar minha dúvida agora. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Setembro 14, 2011 e porque não faz assim, ao invés de usar variáveis SELECT * FROM CA_TESTE_RET_EFIC B WHERE date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( str_to_date('01/05/2011', '%d/%m/%Y'), concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( str_to_date('31/12/2011', '%d/%m/%Y'), concat('01/%m/', extract(Year from SYSDATE()))); claro que existe forma melhor de se fazer essa operação, está dando muita volta para pouca coisa Compartilhar este post Link para o post Compartilhar em outros sites
jmlavoier 0 Denunciar post Postado Setembro 14, 2011 Victor, eu tinha pensado desta maneira, mas o problema é que estou trabalhando em um sistema que executa consultas sql não criadas por mim. O sistema possui um adminitrador para o supervisor criar consultas sql, para gerar relatórios. E eles estão me pedindo para que consiga executar vários blocos de comando. Eles me informaram que vão precisar, como neste exemplo que passei, foi somente um exemplo. Não fui muito feliz neste exemplo, mas acho que deu pra entender. Compartilhar este post Link para o post Compartilhar em outros sites
smloUIS 0 Denunciar post Postado Setembro 14, 2011 não entendi muito bem, mais olha se é isso: <? $comando[1] = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y');"; $comando[2] = "SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y');"; $comando[3] = "SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; for ($y = 0; ; $y++) { if ($y > 3) { break; } $rs_teste = @mysql_query($comando[$y] ,$con_teste); } echo "Funções executadas"; ?> Me responda se é isso msmo pra minha pessoa nao ficar em duvida -kk ^^ Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Setembro 14, 2011 Mas não posso fazer desta maneira na verdade até pode sim. ; é um delimitador especial. você pode varrer a string inicial que recebeu, atrás do ;, quebrar em várias posições, e então executar uma a uma, até usando a idéia do loop. a extensão mysql_ realmente não faz multiplas queries. Se você quiser fazer isso, precisa usar mysqli ou pdo. Compartilhar este post Link para o post Compartilhar em outros sites
smloUIS 0 Denunciar post Postado Setembro 14, 2011 éer o que eu passei aqui funcionou bunitinho .-. ee eu tinha esqecido de tirar as ';' mais corrigi isso. Ai não funcionou ? :S @edit o script eu usei os comandos desse: $comando1 = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y');"; @mysql_query($comando1,$con_teste); $comando2 = "SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y');"; @mysql_query($comando2,$con_teste); $comando = "SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; $rs_teste = @mysql_query($comando,$con_teste); só adaptei: <? $comando[1] = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y');"; $comando[2] = "SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y');"; $comando[3] = "SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())));"; for ($y = 0; ; $y++) { if ($y > 3) { break; } $rs_teste = @mysql_query($comando[$y] ,$con_teste); } echo "Funções executadas"; ?> Compartilhar este post Link para o post Compartilhar em outros sites
jmlavoier 0 Denunciar post Postado Setembro 15, 2011 Obrigado William e smloUIS, gostei da ideia de vocês, bacana mesmo. Implementei desta maneira a ideia de vocês e funcionou legal. $comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y'); SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y'); SELECT * FROM CA_TESTE_RET_EFIC B WHERE AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) ) between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE()))) AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())))"; $comandos = explode(";",$comando); foreach($comandos as $sql){ $rs_teste = @mysql_query($sql,$con_teste); } Espero que desta maneira não ocorra problema. Acredito que não pois assim funciona todos os blocos retornando o resultset somente do ultimo. Mas eu fiquei curioso em relação ao mysqli e pdo que o William comentou, eu estava vendo sobre o mysqli, parece ser bem interessante, gostaria de saber onde encontro material para estudar estes componentes fora o php.net. Vlw galera, abraço a todos. Compartilhar este post Link para o post Compartilhar em outros sites