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 ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

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