Martin aus Wien: Problem mit ORDER BY

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

  1. 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!

    1. 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

      1. 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

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]