2011-10-05 22 views
5

He tropezado con un problema que pensé que sería fácil de resolver, pero que parece estar volviéndome loco. Por lo tanto, estoy tratando de ordenar algunos registros MySQL por tiempo, y luego ordenarlos por fecha. Por ejemplo, aquí está mi datos MySQL:PHP/MySQL: ordenado por fecha, por fecha

+----+------------+----------+---------------------------+--------+ 
| id | date  | time  | entry      | status | 
+----+------------+----------+---------------------------+--------+ 
| 21 | 2011-10-05 | 09:42:06 | All systems online.  |  1 | 
| 22 | 2011-10-05 | 09:43:09 | Maintenance starting.  |  2 | 
| 23 | 2011-10-04 | 08:42:06 | Systems online and ready. |  1 | 
| 24 | 2011-10-05 | 09:44:30 | Systems are offline.  |  0 | 
+----+------------+----------+---------------------------+--------+ 

Por lo tanto, la consulta utilizo para tener todo ordenado es:

SELECT * FROM status order by date ASC;

que da los siguientes resultados:

+----+------------+----------+---------------------------+--------+ 
| id | date  | time  | entry      | status | 
+----+------------+----------+---------------------------+--------+ 
| 21 | 2011-10-05 | 09:42:06 | All systems online.  |  1 | 
| 22 | 2011-10-05 | 09:43:09 | Maintenance starting.  |  2 | 
| 24 | 2011-10-05 | 09:44:30 | Systems are offline.  |  0 | 
| 23 | 2011-10-04 | 08:42:06 | Systems online and ready. |  1 | 
+----+------------+----------+---------------------------+--------+ 

La salida de PHP es el problema. Por lo tanto, la salida en este momento es:

4 de octubre de, 2011

  • sistemas en línea y listo. [08:42]

5 de octubre de, 2011

  • Todos los sistemas en línea. [09:42 AM]

  • Mantenimiento a partir. [09:43 AM]

  • Los sistemas están desconectados. [09:44]

lo que quiero que la salida sea:

de octubre de 5, 2011 - Los sistemas están fuera de línea. [09:44 AM]

  • Mantenimiento de inicio. [09:43 AM]

  • Todos los sistemas en línea. [09:42]

4 de octubre de, 2011

  • sistemas en línea y listo. [08:42 AM]

Básicamente, estoy queriendo todo agrupado por fecha (lo último primero) y quiero la hora más reciente en la parte superior, no en la inferior.

Aquí está mi código PHP:

function getUpdates() { 
    global $db; 
    $updchk = ""; 
    $entries = $db->GetAll("SELECT * FROM status order by date DESC;"); 
    if (!$entries) { ?> 
     <p>No entries in the database, yet.</p> 
    <?php } else 
    foreach ($entries as $entry) { 
     if (ConvertDate($entry['date']) != $updchk) { ?> 
      <h4><?php echo ConvertDate($entry['date']); ?></h4> 
      <p><?php echo $entry['entry']; ?><span class="timestamp"> [<?php echo strftime('%I:%M %p', strtotime($entry['time'])); ?>]</span></p> 
      <?php $updchk = ConvertDate($entry['date']); ?> 
     <?php } else { ?> 
      <p><?php echo $entry['entry']; ?><span class="timestamp"> [<?php echo strftime('%I:%M %p', strtotime($entry['time'])); ?>]</span></p> 
     <?php } 
    } ?> 
<?php } ?> 

se aprecia ninguna ayuda.

Gracias!

Respuesta

18

acaba de agregar una cláusula adicional a la ORDEN POR?

SELECT ... 
FROM status 
ORDER BY `date` DESC, `time` DESC 

Puede ordenar tantos campos (o pocos) como desee, incluso en expresiones arbitrarias si es necesario.

+0

Wow, eso fue fácil. – drewrockshard

+1

+1 para su velocidad! ;) – JellyBelly

4

cambiar la consulta a

SELECT * 
FROM status 
order by `date` desc, `time` desc; 
3

Para pedir por fecha entonces el tiempo en SQL,

SELECT * FROM status ORDER BY date DESC, time DESC; 
3

intente esto:

SELECT * FROM `status` ORDER BY `date`, `time` DESC 
0

SELECT * FROM para el estado por fecha (fecha) asc, tiempo desc;

1
SELECT * FROM `status` ORDER BY `date` DESC, `time` DESC 

de trabajo para su código

+3

díganos por favor, ¿cuál es la diferencia entre su respuesta y una ya aceptada, respuesta correcta, ** publicado AÑO ** – Wh1T3h4Ck5