Ir para conteúdo

POWERED BY:

Arquivado

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

ROGERIO MOREIRA

filtrar valores de um select com o for

Recommended Posts

Olá feras

 

tenho o seguinte problema:

for ( $dia = 1;  $dia <= 31; $dia++ ) {
    $query = "Select * for agenda where year(data) = '$ano' and month(data) = '$mes' and day(data)  = '$dia'";
}

dessa forma o sistema faz trinta buscas no mês, o que fica muito sobrecarregado.

 

preciso tirar esse select de dentro do for para que se faça um único select no mês e depois agrupar por dia;

 

$query = "Select * for agenda where and year(data) = '$ano' and month(data) = '$mes' group by day(data)";

$agenda =  mysql_query($query, $conexao) or die(mysql_error());

$row = mysql_fetch_assoc($agenda);

 

agora preciso pegar os registros diários desta consulta:

for ($dia = 1; $dia <= 31; $dia++ ) {
    //???
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Como está a estrutura da sua tabela?

- Você precisa ter atenção que cada mês possui ultimo_dia diferentes.

 

O seu comentário de: "dessa forma o sistema faz trinta buscas no mês, o que fica muito sobrecarregado."

 

Sobrecarregado não fica. Porem se não tem necessidade é outra questão. 

 

Vamos seguindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quanto a questão de dias do mês o meu código php está fazendo a distinção;

 

só quero fazer um único select para o mês inteiro e depois selecionar registros por dia;

 

por exemplo:

$query = "select * for agenda where year(data) = '2018' and month(data) = '01'";

$dados = mysql_query($query, $conexao);

$row = mysql_query_assoc($dados);

neste exemplo eu estou pegando todos os registros do mês:

agora eu preciso pegar os registros por dia dessa $row

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo

$query = "select * from agenda where year(data) = '2018' and month(data) = '01' group by day(data)";

$dados = mysql_query($query);

$row = mysql_fetch_assoc($dados);

eu estou filtrando os registros por mês e agrupando por dia

agora eu preciso saber como pegar os registros diários dessa consulta

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom. 
Analisando aqui, vejo que tenho dúvidas.

Você possui vários registros duplicados com a mesma data? Se a data for única por registro não tem pq agrupar por data.

 

Seria interessante se ainda existir dúvidas que você cole uma parte do seu banco de dados e esclarecer mais as coisas.

 

Testei assim:


 

//$sql        = "SELECT * FROM agenda WHERE ano = '2018' AND mes = '02' GROUP BY dia";
$sql        = "SELECT * FROM agenda WHERE ano = '2018' AND mes = '02'";
$conexao   = mysqli_connect("localhost","root","","ajuda") or die('Erro ao se conectar a base de dados');
$resultado = mysqli_query($conexao,$sql) or die('Erro ao inserir os dados '.mysqli_error($conexao));
mysqli_close($conexao);


while($linha = $resultado->fetch_assoc()) {

    #var_dump($linha); die;

    echo 'ID: '.$linha["id"].'<br/>';
    echo 'Nome: '.$linha["nome"].'<br/>';
    echo 'Dia: '.$linha["dia"].'<br/>';
    echo 'Mes: '.$linha["mes"].'<br/>';
    echo 'Ano: '.$linha["ano"].'<hr/>';

}

 

banco de dados:

CREATE TABLE `agenda` (
  `id` int(10) NOT NULL,
  `ano` varchar(4) NOT NULL,
  `mes` varchar(2) NOT NULL,
  `dia` varchar(2) NOT NULL,
  `nome` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `agenda`
--

INSERT INTO `agenda` (`id`, `ano`, `mes`, `dia`, `nome`) VALUES
(1, '2018', '02', '01', 'Nome 01'),
(2, '2018', '02', '02', 'Nome 02'),
(3, '2018', '02', '03', 'Nome 03'),
(4, '2018', '02', '04', 'Nome 04'),
(5, '2018', '02', '05', 'Nome 05'),
(6, '2018', '02', '06', 'Nome 06'),
(7, '2018', '02', '07', 'Nome 07'),
(8, '2018', '02', '08', 'Nome 08'),
(9, '2018', '02', '09', 'Nome 09'),
(10, '2018', '02', '10', 'Nome 10');

saída

 

Nome: Nome 01
Dia: 01
Mes: 02
Ano: 2018

ID: 2
Nome: Nome 02
Dia: 02
Mes: 02
Ano: 2018

ID: 3
Nome: Nome 03
Dia: 03
Mes: 02
Ano: 2018

ID: 4
Nome: Nome 04
Dia: 04
Mes: 02
Ano: 2018

ID: 5
Nome: Nome 05
Dia: 05
Mes: 02
Ano: 2018

ID: 6
Nome: Nome 06
Dia: 06
Mes: 02
Ano: 2018

ID: 7
Nome: Nome 07
Dia: 07
Mes: 02
Ano: 2018

ID: 8
Nome: Nome 08
Dia: 08
Mes: 02
Ano: 2018

ID: 9
Nome: Nome 09
Dia: 09
Mes: 02
Ano: 2018

ID: 10
Nome: Nome 10
Dia: 10
Mes: 02
Ano: 2018

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT * FROM `teste` WHERE `data` BETWEEN '0000-00-00' AND '0000-00-00' GROUP BY data

 

so usar o Group BY

 

usando sua estrutura ficaria +- assim

$query = "Select * for agenda where year(data) = '$ano' and month(data) = '$mes' and day(data)  = '$dia' GROUP BY day" 

 

para campos de datas, e melhor utilizar campo como DATE, para evitar constragimentos, e ter que tratar datas fora da consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem, sim, vários registros por dia, conforme o exemplo

 

no caso, o sistema faz uma varredura dia por dia e conta os registros agendados a cada dia do mês dentro do comando for,

tento que fazer 31 buscas a cada acesso

 

exemplo como está

for ( $dia = 1; $dia < 31; $dia++ ) {
       select * from agenda where dia = '$dia';
)

 

o que eu queria era tirar esse select de dentro do for e fazer com que ele busque todos os itens do mes de uma vez e depois fazer com que o for pegue os registros por dia

 

 

agenda.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 27/02/2018 at 14:13, ThalissonChagas1407 disse:

SELECT * FROM `teste` WHERE `data` BETWEEN '0000-00-00' AND '0000-00-00' GROUP BY data

 

so usar o Group BY

 

usando sua estrutura ficaria +- assim


$query = "Select * for agenda where year(data) = '$ano' and month(data) = '$mes' and day(data)  = '$dia' GROUP BY day" 

 

para campos de datas, e melhor utilizar campo como DATE, para evitar constragimentos, e ter que tratar datas fora da consulta

Boa Thalisson,

 

na verdade o que eu estou querendo é fazer uma única busca para o mês inteiro, e depois, com o comando for, filtrar os registros por dia, por exemplo:

 


 

$query = "select * from agenda where year(data) = '$ano' and month(data) = '$mes'";



for ( $dia = 1 ; $dia < 31 ; $dia++ ) {
    /** dia 1:

     os itens de hoje são:

     A

     B

     C



     dia 2:

     os itens de hoje são:

     D

     E **/
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Rogerio.

 

Eu fiz assim:

$sql = "SELECT * FROM agenda WHERE data BETWEEN '2018-02-01' AND '2018-02-28'";

// Loop no resultado da pesquisa do range do mês 
while($linha = $resultado->fetch_assoc()) {

    // verifica se existe a entrada no array do dia do mês atual. Se não existir cria a entrada no array
    if(!isset($dias[$linha['dia']])) {
        $dias[$linha['dia']] = [];
    }

    // adiciona o array da linha atual na entrada do dia no array $dias
    array_push($dias[$linha['dia']], $linha);

    /*
    echo 'ID: '.$linha["id"].'<br/>';
    echo 'ID: '.$linha["data"].'<br/>';
    echo 'Nome: '.$linha["nome"].'<br/>';
    echo 'Dia: '.$linha["dia"].'<br/>';
    echo 'Mes: '.$linha["mes"].'<br/>';
    echo 'Ano: '.$linha["ano"].'<hr/>';
    */

}


// Saída final do array $dias
echo '<pre>';
var_dump($dias);
echo '</pre>';

 

Com isso você pode acessar os eventos do dia da seguinte forma:

$dias['DIA'] = array com eventos do dia.

$dias['DIA'][0]

$dias['DIA'][1]

...

 

Você pode fazer um for por $dias['DIA'] e exibir todos os eventos do dia selecionado.

 

saída:

 

array(8) {
  ["01"]=>
  array(6) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "11"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 001"
    }
    [1]=>
    array(6) {
      ["id"]=>
      string(2) "12"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 002"
    }
    [2]=>
    array(6) {
      ["id"]=>
      string(2) "13"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 003"
    }
    [3]=>
    array(6) {
      ["id"]=>
      string(2) "14"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 004"
    }
    [4]=>
    array(6) {
      ["id"]=>
      string(2) "15"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 005"
    }
    [5]=>
    array(6) {
      ["id"]=>
      string(2) "16"
      ["data"]=>
      string(10) "2018-02-01"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "01"
      ["nome"]=>
      string(10) "Evento 006"
    }
  }
  ["02"]=>
  array(5) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "17"
      ["data"]=>
      string(10) "2018-02-02"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "02"
      ["nome"]=>
      string(10) "Evento 007"
    }
    [1]=>
    array(6) {
      ["id"]=>
      string(2) "18"
      ["data"]=>
      string(10) "2018-02-02"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "02"
      ["nome"]=>
      string(10) "Evento 008"
    }
    [2]=>
    array(6) {
      ["id"]=>
      string(2) "19"
      ["data"]=>
      string(10) "2018-02-02"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "02"
      ["nome"]=>
      string(10) "Evento 009"
    }
    [3]=>
    array(6) {
      ["id"]=>
      string(2) "20"
      ["data"]=>
      string(10) "2018-02-02"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "02"
      ["nome"]=>
      string(10) "Evento 010"
    }
    [4]=>
    array(6) {
      ["id"]=>
      string(2) "21"
      ["data"]=>
      string(10) "2018-02-02"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "02"
      ["nome"]=>
      string(10) "Evento 011"
    }
  }
  ["03"]=>
  array(2) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "22"
      ["data"]=>
      string(10) "2018-02-03"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "03"
      ["nome"]=>
      string(10) "Evento 012"
    }
    [1]=>
    array(6) {
      ["id"]=>
      string(2) "23"
      ["data"]=>
      string(10) "2018-02-03"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "03"
      ["nome"]=>
      string(10) "Evento 013"
    }
  }
  ["04"]=>
  array(1) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "24"
      ["data"]=>
      string(10) "2018-02-04"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "04"
      ["nome"]=>
      string(10) "Evento 014"
    }
  }
  ["05"]=>
  array(1) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "25"
      ["data"]=>
      string(10) "2018-02-05"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "05"
      ["nome"]=>
      string(10) "Evento 015"
    }
  }
  ["06"]=>
  array(4) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "26"
      ["data"]=>
      string(10) "2018-02-06"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "06"
      ["nome"]=>
      string(10) "Evento 016"
    }
    [1]=>
    array(6) {
      ["id"]=>
      string(2) "27"
      ["data"]=>
      string(10) "2018-02-06"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "06"
      ["nome"]=>
      string(10) "Evento 017"
    }
    [2]=>
    array(6) {
      ["id"]=>
      string(2) "28"
      ["data"]=>
      string(10) "2018-02-06"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "06"
      ["nome"]=>
      string(10) "Evento 018"
    }
    [3]=>
    array(6) {
      ["id"]=>
      string(2) "29"
      ["data"]=>
      string(10) "2018-02-06"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "06"
      ["nome"]=>
      string(10) "Evento 019"
    }
  }
  ["07"]=>
  array(3) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "30"
      ["data"]=>
      string(10) "2018-02-07"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "07"
      ["nome"]=>
      string(10) "Evento 020"
    }
    [1]=>
    array(6) {
      ["id"]=>
      string(2) "31"
      ["data"]=>
      string(10) "2018-02-07"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "07"
      ["nome"]=>
      string(10) "Evento 021"
    }
    [2]=>
    array(6) {
      ["id"]=>
      string(2) "32"
      ["data"]=>
      string(10) "2018-02-07"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "07"
      ["nome"]=>
      string(10) "Evento 022"
    }
  }
  ["08"]=>
  array(1) {
    [0]=>
    array(6) {
      ["id"]=>
      string(2) "33"
      ["data"]=>
      string(10) "2018-02-08"
      ["ano"]=>
      string(4) "2018"
      ["mes"]=>
      string(2) "02"
      ["dia"]=>
      string(2) "08"
      ["nome"]=>
      string(10) "Evento 023"
    }
  }
}

 

 

 

tabela:

CREATE TABLE `agenda` (
  `id` int(10) NOT NULL,
  `data` date NOT NULL,
  `ano` varchar(4) NOT NULL,
  `mes` varchar(2) NOT NULL,
  `dia` varchar(2) NOT NULL,
  `nome` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `agenda`
--

INSERT INTO `agenda` (`id`, `data`, `ano`, `mes`, `dia`, `nome`) VALUES
(11, '2018-02-01', '2018', '02', '01', 'Evento 001'),
(12, '2018-02-01', '2018', '02', '01', 'Evento 002'),
(13, '2018-02-01', '2018', '02', '01', 'Evento 003'),
(14, '2018-02-01', '2018', '02', '01', 'Evento 004'),
(15, '2018-02-01', '2018', '02', '01', 'Evento 005'),
(16, '2018-02-01', '2018', '02', '01', 'Evento 006'),
(17, '2018-02-02', '2018', '02', '02', 'Evento 007'),
(18, '2018-02-02', '2018', '02', '02', 'Evento 008'),
(19, '2018-02-02', '2018', '02', '02', 'Evento 009'),
(20, '2018-02-02', '2018', '02', '02', 'Evento 010'),
(21, '2018-02-02', '2018', '02', '02', 'Evento 011'),
(22, '2018-02-03', '2018', '02', '03', 'Evento 012'),
(23, '2018-02-03', '2018', '02', '03', 'Evento 013'),
(24, '2018-02-04', '2018', '02', '04', 'Evento 014'),
(25, '2018-02-05', '2018', '02', '05', 'Evento 015'),
(26, '2018-02-06', '2018', '02', '06', 'Evento 016'),
(27, '2018-02-06', '2018', '02', '06', 'Evento 017'),
(28, '2018-02-06', '2018', '02', '06', 'Evento 018'),
(29, '2018-02-06', '2018', '02', '06', 'Evento 019'),
(30, '2018-02-07', '2018', '02', '07', 'Evento 020'),
(31, '2018-02-07', '2018', '02', '07', 'Evento 021'),
(32, '2018-02-07', '2018', '02', '07', 'Evento 022'),
(33, '2018-02-08', '2018', '02', '08', 'Evento 023');

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.