Ir para conteúdo

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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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