Problem mit ORDER BY
Martin aus Wien
- datenbank
0 dedlfix
Bei einer MySQL Abfrage, die nach 2 Spalten geordnet sein soll, von denen die 2. Spalte vom Typ 'time' ist, bekomme ich keine korrekte Ordnung. Wo liegt der Fehler?
Das ist meine Abfrage:
SELECT * FROM
tischbestellungen WHERE Datum = '2010-01-15' ORDER BY Raum, Uhrzeit
Das ist die Tabelle:
CREATE TABLE `tischbestellungen` (
`_Reservierung_ID` bigint(20) NOT NULL auto_increment,
`Datum` date NOT NULL default '0000-00-00',
`Uhrzeit` time NOT NULL default '00:00:00',
`Anzahl_Personen` int(11) NOT NULL default '0',
`Raum` enum('_1_Gastraum','_2_Apostelzimmer','_3_Ofenzimmer') collate utf8_unicode_ci NOT NULL default '_1_Gastraum',
`Vorname` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Nachname` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Email` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`Telefon` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Newsletter` enum('Ja','Nein') collate utf8_unicode_ci NOT NULL default 'Ja',
`_Bestaetigung` enum('','ok','abgelehnt','abgesagt') collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`_Reservierung_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ;
INSERT INTO `tischbestellungen` VALUES (10, '2010-01-15', '19:30:00', 2, '_1_Gastraum', '', 'Rapunzel', ''someone@example.com'', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (9, '2010-01-13', '20:00:00', 8, '_2_Apostelzimmer', '', 'Meier', '', '0664/45 66 78', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (8, '2010-01-13', '20:00:00', 5, '_3_Ofenzimmer', 'Hans', 'Müller', ''someone@example.com'', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (11, '2010-01-16', '20:00:00', 20, '_2_Apostelzimmer', 'Ferdinand', 'Raimund', ''someone@example.com'', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (12, '2010-01-15', '20:00:00', 5, '_1_Gastraum', '', 'Auer', ''someone@example.com'', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (13, '2010-01-15', '19:00:00', 3, '_1_Gastraum', '', 'Mann', ''someone@example.com'', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (14, '2010-01-15', '19:00:00', 12, '_3_Ofenzimmer', '', 'Raimund', ''someone@example.com'', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (15, '2010-01-15', '20:00:00', 2, '_3_Ofenzimmer', '', 'Rapunzel', '', '0664/45 66 78', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (16, '2010-01-15', '19:00:00', 4, '_3_Ofenzimmer', '', 'Müller', ''someone@example.com'', '', 'Nein', 'ok');
INSERT INTO `tischbestellungen` VALUES (17, '2010-01-18', '20:00:00', 3, '_3_Ofenzimmer', 'Ferdinand', 'Müller', '', '0664/45 66 78', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (18, '0000-00-00', '00:00:00', 20, '_3_Ofenzimmer', '', 'Auer', ''someone@example.com'', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (19, '0000-00-00', '00:00:00', 20, '_3_Ofenzimmer', '', 'Auer', ''someone@example.com'', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (20, '2010-01-28', '15:00:00', 19, '_3_Ofenzimmer', '', 'Auer', ''someone@example.com'', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (21, '2010-01-17', '19:30:00', 5, '_1_Gastraum', '', 'Mann', ''someone@example.com'', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (22, '2010-01-19', '17:00:00', 2, '_1_Gastraum', '', 'Auer', ''someone@example.com'', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (23, '2010-01-15', '18:00:00', 15, '_1_Gastraum', 'Martin', 'Auer', '', '01/654 32 11', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (24, '2010-01-15', '10:00:00', 1, '_1_Gastraum', 'Ferdinand', 'Auer', '', '01/654 32 11', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (25, '2010-01-15', '12:00:00', 0, '_1_Gastraum', '', '', '', '', 'Ja', '');
Das ist das Ergebnis. Die Daten sind nach 'Raum' geordnet, aber nicht nach 'Uhrzeit':
24 2010-01-15 10:00:00 1 _1_Gastraum Ferdinand Auer 01/654 32 11 Nein
23 2010-01-15 18:00:00 15 _1_Gastraum Martin Auer 01/654 32 11 Nein
10 2010-01-15 19:30:00 2 _1_Gastraum Rapunzel 'someone@example.com' Ja ok
13 2010-01-15 19:00:00 3 _1_Gastraum Mann 'someone@example.com' Ja ok
25 2010-01-15 12:00:00 0 _1_Gastraum Ja
12 2010-01-15 20:00:00 5 _1_Gastraum Auer 'someone@example.com' Ja ok
16 2010-01-15 19:00:00 4 _3_Ofenzimmer Müller 'someone@example.com' Nein ok
15 2010-01-15 20:00:00 2 _3_Ofenzimmer Rapunzel 0664/45 66 78 Ja ok
14 2010-01-15 19:00:00 12 _3_Ofenzimmer Raimund 'someone@example.com' Ja
Was mache ich falsch?
Gruß und Dank
Martin
Hi!
Was mache ich falsch?
Keine Ahnung. Ich konnte den Fehler (nach Korrektur der Anführungszeichen bei den E-Mail-Adressen in den INSERT-Statements) im phpMyAdmin nicht reproduzieren.
Lo!
Danke, dass du's probiert hast. Ich habe MySQL 4.1.8
Ich hab die echten Email-Adressen ausgetauscht, dabei ist der Fehler mit den Anführungszeichen passiert. Falls es noch jemand probieren will, hier ist der Code noch einmal korrekt:
CREATE TABLE `tischbestellungen` (
`_Reservierung_ID` bigint(20) NOT NULL auto_increment,
`Datum` date NOT NULL default '0000-00-00',
`Uhrzeit` time NOT NULL default '00:00:00',
`Anzahl_Personen` int(11) NOT NULL default '0',
`Raum` enum('_1_Gastraum','_2_Apostelzimmer','_3_Ofenzimmer') collate utf8_unicode_ci NOT NULL default '_1_Gastraum',
`Vorname` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Nachname` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Email` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`Telefon` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`Newsletter` enum('Ja','Nein') collate utf8_unicode_ci NOT NULL default 'Ja',
`_Bestaetigung` enum('','ok','abgelehnt','abgesagt') collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`_Reservierung_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ;
INSERT INTO `tischbestellungen` VALUES (10, '2010-01-15', '19:30:00', 2, '_1_Gastraum', '', 'Rapunzel', 'someone@example.com', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (9, '2010-01-13', '20:00:00', 8, '_2_Apostelzimmer', '', 'Meier', '', '0664/45 66 78', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (8, '2010-01-13', '20:00:00', 5, '_3_Ofenzimmer', 'Hans', 'Müller', 'someone@example.com', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (11, '2010-01-16', '20:00:00', 20, '_2_Apostelzimmer', 'Ferdinand', 'Raimund', 'someone@example.com', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (12, '2010-01-15', '20:00:00', 5, '_1_Gastraum', '', 'Auer', 'someone@example.com', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (13, '2010-01-15', '19:00:00', 3, '_1_Gastraum', '', 'Mann', 'someone@example.com', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (14, '2010-01-15', '19:00:00', 12, '_3_Ofenzimmer', '', 'Raimund', 'someone@example.com', '', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (15, '2010-01-15', '20:00:00', 2, '_3_Ofenzimmer', '', 'Rapunzel', '', '0664/45 66 78', 'Ja', 'ok');
INSERT INTO `tischbestellungen` VALUES (16, '2010-01-15', '19:00:00', 4, '_3_Ofenzimmer', '', 'Müller', 'someone@example.com', '', 'Nein', 'ok');
INSERT INTO `tischbestellungen` VALUES (17, '2010-01-18', '20:00:00', 3, '_3_Ofenzimmer', 'Ferdinand', 'Müller', '', '0664/45 66 78', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (18, '0000-00-00', '00:00:00', 20, '_3_Ofenzimmer', '', 'Auer', 'someone@example.com', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (19, '0000-00-00', '00:00:00', 20, '_3_Ofenzimmer', '', 'Auer', 'someone@example.com', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (20, '2010-01-28', '15:00:00', 19, '_3_Ofenzimmer', '', 'Auer', 'someone@example.com', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (21, '2010-01-17', '19:30:00', 5, '_1_Gastraum', '', 'Mann', 'someone@example.com', '', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (22, '2010-01-19', '17:00:00', 2, '_1_Gastraum', '', 'Auer', 'someone@example.com', '', 'Ja', '');
INSERT INTO `tischbestellungen` VALUES (23, '2010-01-15', '18:00:00', 15, '_1_Gastraum', 'Martin', 'Auer', '', '01/654 32 11', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (24, '2010-01-15', '10:00:00', 1, '_1_Gastraum', 'Ferdinand', 'Auer', '', '01/654 32 11', 'Nein', '');
INSERT INTO `tischbestellungen` VALUES (25, '2010-01-15', '12:00:00', 0, '_1_Gastraum', '', '', '', '', 'Ja', '');
Gruß und Dank
Martin
Hi,
Ich habe MySQL 4.1.8
Unter 5.0 kann ich das Problem mit deinen Beispieldaten ebenfalls *nicht* nachvollziehen.
Vielleicht ein Bug dieser sehr alten MySQL-Version bzgl. Sortierung von TIME-Werten?
Bekommst du das gleiche Verhalten, wenn du statt zweier einzelner Spalten für Datum und Uhrzeit (warum eigentlich?) eine Spalte vom Type DATETIME oder TIMESTAMP benutzt, und nach dieser sortierst? (Bzw., wenn Datensätze mehrerer Tage angezeigt werden sollen und dabei immer noch nur nach der Uhrzeit sortiert werden soll, du diese mittels TIME() extrahierst.)
MfG ChrisB