Ir para conteúdo

Arquivado

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

vinicius015

Ordenar por data

Recommended Posts

Olá, boa noite!

 

Tenho um campo data onde insiro a data automaticamente no MySql.

 

uso a seguinte SQL de consulta.

 

$sqlmostra = "SELECT SUM(quantidade) AS soma, SUM(totalliquido) AS soma2, id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido FROM pedido WHERE motorista LIKE '%ALEXANDRE%' Group By id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido ORDER BY datanecessaria ASC ";
Só que ele não ordena por Ano/Mes/ano, ele esta ordenando, dando preferencia ao dia e errando no mês, poderia me ajudar?
Abaixo coloco um print para poderem ver como esta saindo.
10505997_940871415927269_362436173_o.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, bom dia! Tudo bem?

 

O campo esta como TEXT, deveria efetuar a mudança do mesmo para DATE?

 

os dados inseridos anteriormente sofrerão alguma modificação?

 

E a forma como insiro via form, deverá ter que modificar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que a ordenação seja feita por data, você precisa de um campo do tipo DATE ou DATETIME. No caso do tipo TEXT, a ordenação é alfabética e, por isso, só considera os primeiros caracteres.

 

Você, provavelmente, precisará fazer uma alteração no formato das datas, já que os bancos de dados trabalham com um formato diferente do brasileiro. Você tem 01/07/2014, deverá ter 2014-07-01. Depois de alterar os dados no banco de dados, altere a coluna para o tipo correto.

 

No caso da inserção, é só seguir o padrão novo – e provavelmente, você precisará de alguma library Javascript para fazer a conversão ou converter via PHP antes de inserir no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel,

 

Consegui realizar a inserção, colocando o padrão dd-mm-aaaa para o cliente e inserindo no banco no formato aaaa-mm-dd.

 

Agora na hora de realizar a consulta, poderia me instruir como realizar a mesma?

 

Primeiro, no relatório, precisaria mostrar ela em formato nacional e depois colocar em sequencia de datas.

 

Obrigado pela ajuda,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para realizar a consulta, você não precisa tocar no seu código ou na query. Basta um ORDER BY na coluna datanecessaria e os resultados deverão ser ordenados por cronologicamente de forma correta.

 

Na hora de exibir os dados, novamente, será necessário converter o formato. Você pode se utilizar do objeto DateTime do PHP, para isso:

$date = new DateTime('2014-0701');
$date->format('d/m/Y');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, a ordenação deu certo, tomei a liberdade de postar o código abaixo e mais uma vez pedir ajuda a ti. tentei da sua forma não consegui, ai pesquisei e também não consegui. poderia me ajudar?

 

Trabalhei com:

 

$datavencimento = implode("/",array_reverse(explode("-",$datavencimento)));

$sqltotal = "SELECT SUM(quantidade) AS soma, SUM(totalliquido) AS soma2, id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido FROM pedido WHERE motorista LIKE '%SEBASTIÃO%'";
//$sqltotal = "SELECT SUM(quantidade) AS soma, SUM(totalliquido) AS soma2, id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido FROM pedido WHERE empresa LIKE '%$pesq1%' BETWEEN $dtinicio AND $dtfim";

$sqlmostra = "SELECT SUM(quantidade) AS soma, SUM(totalliquido) AS soma2, id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido FROM pedido WHERE motorista LIKE '%SEBASTIÃO%' Group By id, empresa, pedidonumero, datanecessaria, localdeentrega, datavencimento ,transportadora, motorista, placa, quantidade, totalliquido ORDER BY datavencimento ASC ";
//$sql = "SELECT id, empresa FROM pedido (SELECT SUM(quantidade) AS soma FROM pedido) WHERE empresa LIKE '%%$pesq1%%'";

$datavencimento = implode("/",array_reverse(explode("-",$datavencimento)));



$exec = mysql_query($sqltotal) or die(mysql_error());

//@$sql = "SELECT * FROM editorial ORDER by ano, mes, dia DESC";
//@$sql = "SELECT * FROM editorial ORDER by id ASC";
@$resultado = mysql_query($sqlmostra)
or die ("Não Localizado");
$conta = mysql_num_rows($resultado);

if($conta == 0){
		echo "<center><font face='Tahoma' size='2'><br><br>Não existe resultados para esta pesquisa!</font></center><BR>";
		}else


$pagina = empty($HTTP_GET_VARS['pagina'])? 1 : $HTTP_GET_VARS['pagina']; // qual página estamos visualizando?
$registros_por_pagina = "500";//AQUI TU COLOCA A QUIANTIDADE DE RESULTADOS POR PAGINA
$pagina_anterior = $pagina - 1;
$pagina_posterior = $pagina + 1;
$registro_inicio = ($registros_por_pagina * $pagina) - $registros_por_pagina;

$total_de_registros = mysql_num_rows($resultado);

if ($total_de_registros <= $registros_por_pagina) {
    $total_de_paginas = 1;
}elseif (($total_de_registros % $registros_por_pagina) == 0) {
    $total_de_paginas = ($total_de_registros / $registros_por_pagina);
}else{
    $total_de_paginas = ($total_de_registros / $registros_por_pagina) + 1;
}


$total_de_paginas = (int) $total_de_paginas;

if (($pagina > $total_de_paginas) || ($pagina < 0))
{
    echo 'número da página inválido';
    exit;
}

$sqlmostra = $sqlmostra . " LIMIT $registro_inicio, $registros_por_pagina";

$resultado = mysql_query($sqlmostra);
@$total_de_registros_da_pagina = mysql_num_rows($resultado);
if ($total_de_registros_da_pagina == 0)
{
    echo "<font face='Tahoma' size=2'><center></center></font>";
    exit;
}
else
{



while ($x=mysql_fetch_array($resultado)) {
		$dt_x = explode("-",$x['data_insc']);
					$ano_pl = $dt_x[0];
					$mes_pl = $dt_x[1];
					$dia_pl = $dt_x[2];
			switch($mes_pl) // acha o mês em português
		{
		  case "01":
		   $m_prt = "Janeiro";
			    break;
		  case "02":
		   $m_prt = "Fevereiro";
			    break;
		  case "03":
		   $m_prt = "Março";
			    break;
		  case "04":
		   $m_prt = "Abril";
			    break;
		  case "05":
		   $m_prt = "Maio";
			    break;
		  case "06":
		   $m_prt = "Junho";
			    break;
		  case "07":
		   $m_prt = "Julho";
			    break;
		  case "08":
		   $m_prt = "Agosto";
			    break;
		  case "09":
		   $m_prt = "Setembro";
			    break;
		  case "10":
		   $m_prt = "Outubro";
			    break;
		  case "11":
		   $m_prt = "Novembro";
			    break;
		  case "12":
		   $m_prt = "Dezembro";
			   break;
			}
        echo"
<table border='0' cellpadding='0' cellspacing='0' width='1200' height='30' align='center'>
    <tr>
        <td width='25' height='35%'>
            <p align='center'><span style='font-size:8pt;'><font face='Verdana'>$x[id]</font></span></p>
        </td>
        <td width='200' height='35%'>
            <p align='center'><span style='font-size:8pt;'><font face='Verdana'>$x[empresa]</font></span></p>
        </td>
        <td width='100' height='35%'>
            <p align='center'><span style='font-size:8pt;'><font face='Verdana'>$x[datanecessaria]</font></span></p>
        </td>
        <td width='200' height='35%'>
            <p align='center'><span style='font-size:8pt;'><font face='Verdana'>$x[localdeentrega]</font></span></p>
        </td>
        <td width='100' height='35%'>
            <p align='center'><span style='font-size:8pt;'><font face='Verdana'>$x[datavencimento]</font></span></p>
        </td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi com o que você ainda precisa de ajuda, mas vamos lá: o PHP fornece nativamente uma classe chamada DateTime, com a qual você pode manipular datas de diversas maneiras.

 

No seu caso, quando você capturar os dados do banco de dados, basta pegar a data, conforme ela é entregue – normalmente como string – e instanciar um novo objeto DateTime:

$date = new DateTime($row['datanecessaria']);

Então, com esse objeto instanciado, você pode exibir a data com a formatação que quiser, respeitando as formatações disponíveis para datas no PHP:

echo $date->format('d/m/Y');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Daniel,

 

havia feito desta forma mesmo, só que quando vou realizar a consulta a mesma aprece em branco.

 

$date = new DateTime($x['datavencimento']);
echo $date->format('d/m/Y');

Tentei de 3 formas já e nenhuma me mostra o resultado =/ infelizmente.

 

Vinicius

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.