Remember 1:10 PM is actually 13:10 hrs. You have nothing wrong.
Try this
SELECT if(hour(date)<13,"AM","PM") as noon, if(hour(date)<13,date,subdate(date,interval 12 hour)) as time,ID FROM date_test WHERE 1 order by if(hour(date)<13,date,subdate(date,interval 12 hour)) LIMIT 0, 30
ON a data set like this one
:
phpMyAdmin MySQL-Dump
version 2.2.0
#
Host: localhost
Generation Time: November 21, 2001, 4:18 pm
Server version: 3.23.36
PHP Version: 4.0.4pl1
Database : phpbuilder
--------------------------------------------------------
#
Table structure for table date_test
#
CREATE TABLE date_test (
ID int(11) NOT NULL auto_increment,
DATE datetime NOT NULL default '0000-00-00 00:00:00',
EXTRA char(25) NOT NULL default '',
PRIMARY KEY (ID),
KEY DATE (DATE)
) TYPE=MyISAM;
#
Dumping data for table date_test
#
INSERT INTO date_test VALUES ( '1', '2001-11-21 12:08:58', '1');
INSERT INTO date_test VALUES ( '2', '2001-11-21 11:09:11', '');
INSERT INTO date_test VALUES ( '3', '2001-11-21 13:09:17', '');
INSERT INTO date_test VALUES ( '4', '2001-11-21 14:09:25', '');
INSERT INTO date_test VALUES ( '5', '2001-11-21 06:09:37', '');
PM 2001-11-21 01:09:17 3
PM 2001-11-21 02:09:25 4
AM 2001-11-21 06:09:37 5
AM 2001-11-21 11:09:11 2
AM 2001-11-21 12:08:58 1
Now the PM hours ID 3 a 4 are before the AM hours 5, 2 and 1. AM and PM is added so you don't loose track.
Saludos
Gerardo