Ir para conteúdo

POWERED BY:

Arquivado

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

Markplay

while com pausas em datas.

Recommended Posts

Olá. Estou tento alguns problemas, creio eu que seja na parte teórica, de fato, é isso, acontece que quero que o sistema siga a seguinte função: Existe vários registros no banco com varias datas inclusive datas iguais. quero pega cada uma das datas transforma as repetidas em uma só na hora de imprimi-la e da o titulo do registro "que está no banco" decorrente da sua data. EX

 

Posteres da data 05/11/2014

 

Postes 1

Postes 2

Postes 3

Postes 4

Postes 5

 

Posteres da data 04/11/2014

 

Postes 1

Postes 2

Postes 3

Postes 4

Postes 5

 

Posteres da data 03/11/2014

 

Postes 1

Postes 2

Postes 3

Postes 4

Postes 5

_______________________________________________________________

 

e assim sucessivamente, tentei usando o while mais não deu em nada vejam:

 

"Dependendo da quantidade de postes decorrente de cada data não imposta"

 

<?php
$dia = date("d", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));
$mes = date("m", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));
$ano = date("Y", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));


switch($mes){
case "01":
$numMes = "01";
break;


case "02":
$numMes = "02";
break;


case "03":
$numMes = "03";
break;


case "04":
$numMes = "04";
break;


case "05":
$numMes = "05";
break;


case "06":
$numMes = "06";
break;


case "07":
$numMes = "07";
break;


case "08":
$numMes = "08";
break;


case "09":
$numMes = "09";
break;


case "10":
$numMes = "10";
break;


case "11":
$numMes = "11";
break;


case "12":
$numMes = "12";
break;
}
date_default_timezone_set('America/Sao_Paulo');
$date = $dia."/".$numMes."/".$ano;


$UD_DATA = substr($date,3,7);


$q = open::executar("SELECT * FROM postagens");


$i = 0; 


while($s = $q->fetch_object()){
$UD_D = substr($s->data,3,7);


$OUT = $i+1; $i++;


/* if($UD_D == '11/2014'){
echo $DATE = substr($s->data,3,7)."<br>";
break;
}*/


} 
?>
OBRIGADO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - Selecione todos os registros do banco de dados ordenados por data.

2 - Na hora de exibir, faça um looping para mostrar cada registro e em cada mudança de dia você exibe a data antes. Para isso, basta armazenar a data anterior em uma variável e compará-la com a do registro atual.

 

Dica: use a classe DateTime.

 

Edit: e por favor... tire esse switch daí. Se você quer exibir o 0 antes do dia, use printf ou str_pad. Exemplo:

printf( '%02d', $mes );

 

[]'s!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Muito Obrigado pela colaboração.... Assim. nos registro a o titulo e a data no qual eles foram postados.... o que acontece, a postagens que posto no mesmo dia e tal... queria ordenar pela data no qual postei.. mais sempre repete, nunca da certo. Nessa imagem tem um bom exemplo:

 

 

https://drive.google.com/file/d/0B58nmNIlzAg-YXZGVkpwdzNQZEU/view?usp=sharing

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejam eu consegui fazer uma coisa aqui, sendo que ainda continua repetindo postagens de datas iguais..

 

<?php
$dia = date("d", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));
$mes = date("m", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));
$ano = date("Y", mktime(gmdate("H")-3, gmdate("i"), gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y")));
switch($mes){
case "01":
$numMes = "01";
break;
case "02":
$numMes = "02";
break;
case "03":
$numMes = "03";
break;
case "04":
$numMes = "04";
break;
case "05":
$numMes = "05";
break;
case "06":
$numMes = "06";
break;
case "07":
$numMes = "07";
break;
case "08":
$numMes = "08";
break;
case "09":
$numMes = "09";
break;
case "10":
$numMes = "10";
break;
case "11":
$numMes = "11";
break;
case "12":
$numMes = "12";
break;
}
date_default_timezone_set('America/Sao_Paulo');
$DAY = cal_days_in_month(CAL_GREGORIAN,$numMes,$ano);
$date = $dia."/".$numMes."/".$ano;
$UD_DATA = substr($date,3,7);
$i = 01;
while($i <= $DAY){
echo $i++." . ";
}
echo '<br>';
$q = open::executar("SELECT * FROM postagens");
$i = 10;
while($s = $q->fetch_object()){
$U = $i+1;
$data_wi = $s->data;
if($i++."/".$numMes."/".$ano >= $data_wi){
echo $DAT = $s->data."<br>";
echo $s->titulo."<br>";
continue;
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim repete, estão duplicadas no banco de dados?

Ou alguma JOIN que causa essa duplicação?

 

Qualquer coisa usa "SELECT DISTINCT".

 

Para não ficar assim

06/11/2014

Poster 1

06/11/2014

Poster 2

pode fazer algo assim

$data = false;
while($s = $q->fetch_object()){
    if ($data != $s->data) {
        $data = $s->data;
       echo $data . "<br>";
     }
    echo $s->titulo."<br>";
}

Não testei, mas isso ajudaria, se a data retornar com hora, faz uma transformação no SQL, ".., DATE_FORMAT(data, '%d/%m/%Y')...."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim:

<?php
$query = open::executar("SELECT * FROM postagens");
// Agrupa os posts
$posts_grupo = array();
while($row = $q->fetch_object()){
    if (!isset($posts[$row['data']]))
        $posts[$row['data']] = array();
    $posts[$row['data']][] = $row;
}

foreach($posts_grupo as $data => $posts) {
    echo "<h2>{$data}</h2>";

    foreach($posts as $post) {
        echo "<p>{$post['titulo']}</p>";
    }
}

Ou como o posts acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Mais uma vez agradeço, vejo que estou condenado a esse script "RSRS"... e

Leandro Senni

Sim as datas também existem repetidas no banco, o negócio é unifica-las, e dá a data só imprimindo uma, e cada um de seus posteres,

 

ExtremsX

Obrigado por tentar ajudar! Não funciona, não imprime nada, pensei que foce só por te trocado os ligamentos do fetch_object() que seria ligado pela seta "->" pelo array no qual seria mas plausível já que o ligamento está com [] colchete..... tentei ajeitar ficando assim, mais não funciona novamente :'(

 

<?php

$query = open::executar("SELECT * FROM postagens");
// Agrupa os posts
$posts_grupo = array();
while($row = $query->fetch_array()){
if (!isset($posts[$row['data']]))
$posts[$row['data']] = array();
$posts[$row['data']][] = $row;
}
foreach($posts_grupo as $data => $posts) {
echo "<h2>{$data}</h2>";
foreach($posts as $post) {
echo "<p>{$post['titulo']}</p>";
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente eu mudei o nome de uma variável e esqueci de mudar no resto do código, aqui vai o corrigido:

<?php
$query = open::executar("SELECT * FROM postagens");
// Agrupa os posts
$posts_grupo = array();
while($row = $query->fetch_array()){
    if (!isset($posts_grupo[$row['data']]))
        $posts_grupo[$row['data']] = array();
    $posts_grupo[$row['data']][] = $row;
}

foreach($posts_grupo as $data => $posts) {
    echo "<h2>{$data}</h2>";

    foreach($posts as $post) {
        echo "<p>{$post['titulo']}</p>";
    }
}

Resultado: http://prntscr.com/53mpe3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caraca... Muito Obrigado funcionou direitinho... Muito obrigado, e eu achando que não ia funcionar ou não tinha jeito "que dizer, que tinha jeito, mas uma forma muito complexa" mais vc mostrou a possibilidade mais simples. obrigado... Vlw... E Obrigado também a os que enviaram suas sugestões...


Desculpa volto a abusar vocês de novo. Código feito pelo

ExtremsX

está perfeito mais não deixa a data atual como a primeira... Tipo... Hoje é dia 06/11/2014 ele coloca no final do de seu mês.. deixando na frente a data mais perto do 01 dia do determinado mês. vejam a imagem, acho que ela já responde o que eu quero dizer "assim espero."

oskok.PNG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

ExtremsX

Sinceramente não tenho como agradecer sua ajuda. mais a extensão Ksort. resolveu em parte já que não preciso mais colocar a sentença WHERE na chamada do registro... mais a parte mais preocupante vc resolveu e agradeço muito por isso, mais ainda continua com o mesmo "probleminha" as datas estão em desordem... deixa me ver se dá pra explicar; é como se quando começasse um novo mês esse mês não vinhe-se em ordem decrescente "DESC" e sim em ordem crescente, já começando pelo maior numero assim como os meses anteriores. Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi bem, você quer ordenar as datas de ordem de decrescente, então use:

http://php.net/manual/pt_BR/function.krsort.php

 

Mas antes, na hora de criar o índice, em vez de salvar o indice como data, converta para timestamp, depois use o krsort, e na hora de exibir a data, converta para data novamente usando date

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. tentei resolver de todas as formas, todos os jeitos, mais estou condenado a isso agora...o sistema está perfeito, mais persiste em deixa o dia maior decorrente de sua data em baixo... fiz uma imagem simulando o jeito que era pra ficar, mais sinceramente dentre tanto tempo usando códigos me deparo com um desafio e tanto e tenho que recorre a pessoas com mais experiencia do que eu... só tenho a agradecer. segue a imagem demostrativa. o lado vermelho mostra como era pra o código imprimir. e o lado preto é como realmente está.

 

oskok.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da sim homem, desista não, Tente assim com as devidas adptações:

 

<?php
$query = open::executar("SELECT * FROM postagens");
// Agrupa os posts
$posts_grupo = array();
while($row = $query->fetch_array()){
    // Altere o formato aqui par ao que está vindo do banco de dados
    $data = DateTime::createFromFormat('d-m-Y', $row['data'])->getTimestamp();
    if (!isset($posts_grupo[$data]))
        $posts_grupo[$data] = array();
    $posts_grupo[$data][] = $row;
}

krsort($posts_grupo);

foreach($posts_grupo as $data => $posts) {
    $data = date('d/m/Y', $data);
    echo "<h2>{$data}</h2>";


    foreach($posts as $post) {
        echo "<p>{$post['titulo']}</p>";
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui da o seguinte erro: Fatal error: Call to a member function getTimestamp() on a non-object in /home/u238514979/public_html/ps-center/pgs/feedback.php on line 67

 

vc alterou alguma coisa no banco de dados. ou a sua versão do php é outra


Consegui. obrigado, agora finalizou, muito obrigado, quase pulei aqui kkkk. "desespero " vc conseguiu. obrigado, o erro estava dando por que a DateTime::createFromFormat('d/m/Y', $row['data'])... estava com traço ao em vês de barras, ai ocasionalmente eu mudei pra tentar só e consegui. obrigado. agora finalmente terminou. obrigado...

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.