Ankündigung

Einklappen
Keine Ankündigung bisher.

GROUP BY und ORDER BY zusammen nutzen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GROUP BY und ORDER BY zusammen nutzen

    Hi,

    ich habe in einer Tabelle 2 Werteangaben, die ich gern kombinieren würde wollen.
    Die kombination selbst klappt auch...

    Code:
    SELECT GROUP_CONCAT(`sort` SEPARATOR ', ') AS sort, GROUP_CONCAT(`label` SEPARATOR ', ') AS label  
    FROM `nav` GROUP BY `ppos`
    ergibt:
    Code:
    Array
    (
        [0] => stdClass Object
            (
                [label] => Login, Anfahrt, Kontakt, Impressum
                [sort] => 4, 1, 2, 3
            )
    
        [1] => stdClass Object
            (
                [label] => Angebot, Produktion, Impressionen, Kuchen, Wir über Uns, Eis
                [sort] => 5, 4, 6, 3, 1, 2
            )
    
    )
    Nun würde ich das ganze noch sortieren wollen... nur greift ein ORDER BY irgendwie so garnicht.
    Weiß einer, woran das liegen könnte ?


  • #2
    Zitat von daniel_1998 Beitrag anzeigen
    nur greift ein ORDER BY irgendwie so garnicht.
    Heißt?
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      ich bekomme die gleiche ausgabe... als wenn ich ORDER BY garnicht eingegeben hätte. Also wie oben stehend

      Kommentar


      • #4
        Und wie sieht dein ORDER BY aus?
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Wie halt ne sauberer ORDER BY-Klausel aussieht

          Code:
          SELECT GROUP_CONCAT(`sort` SEPARATOR ', ') AS sort, GROUP_CONCAT(`label` SEPARATOR ', ') AS label  
          FROM `nav` GROUP BY `ppos` ORDER BY `sort`

          Kommentar


          • #6
            Was passiert wenn du die Konkatenierte Spalte nicht so nennst wie die Ausgangsspalte?
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              schöne idee... aber nada. Gleiche Ausgabe

              Kommentar


              • #8
                hmm... GROUP_CONCAT steht ja an erster Stelle. Weiß jetzt nicht, wie SQL darauf reagiert.
                Aber könnte es sein, das 'sort' garnicht mehr zur Verfügung steht?
                Ich habe es ja schon "überschrieben".. ist ja nach GROUP_CONCAT nur noch n String.

                Zumindest wäre das eine erklärung...

                Kommentar


                • #9
                  Über einen Umweg?
                  Code:
                  SELECT * FROM
                  (SELECT GROUP_CONCAT(`sort` SEPARATOR ', ') AS sort, GROUP_CONCAT(`label` SEPARATOR ', ') AS label  
                  FROM `nav` GROUP BY `ppos`) AS subquery
                  ORDER BY `sort`

                  Kommentar


                  • #10
                    @monolith => leider nein... die Anzeige hat sich zwar durch deine aufstellung verändert... aber letztendlich auch das gleiche.

                    Ausgabe:
                    Code:
                    Array
                    (
                        [0] => stdClass Object
                            (
                                [sort] => 4, 1, 2, 3
                                [label] => Login, Anfahrt, Kontakt, Impressum
                            )
                    
                        [1] => stdClass Object
                            (
                                [sort] => 5, 4, 6, 3, 1, 2
                                [label] => Angebot, Produktion, Impressionen, Kuchen, Wir über Uns, Eis
                            )
                    
                    )

                    Kommentar


                    • #11
                      Code:
                      mysql> select * from test;
                      +-------+------+------+
                      | label | sort | ppos |
                      +-------+------+------+
                      | Test2 |    2 |    1 |
                      | Test3 |    3 |    2 |
                      | Test4 |    4 |    2 |
                      | Test1 |    1 |    1 |
                      +-------+------+------+
                      4 rows in set (0.00 sec)
                      
                      mysql> SELECT GROUP_CONCAT(t.sort SEPARATOR ', ') sort, GROUP_CONCAT(t.label SEPARATOR ', ') label FROM (SELECT sort, label, ppos FROM test ORDER BY sort ASC) t GROUP BY t.ppos;
                      +------+--------------+
                      | sort | label        |
                      +------+--------------+
                      | 1, 2 | Test1, Test2 |
                      | 3, 4 | Test3, Test4 |
                      +------+--------------+
                      2 rows in set (0.00 sec)
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        hmmm.... deine Ausgabe (@tkausl) sieht zwar korrekt aus.... ist aber nicht identisch mit meiner.
                        Kann es sein, das du neue zeilen erzeugt hast und diese schon sortiert iun der DB vorliegen ?

                        Ich poste mal den SQL-Anlege-Code. vvlt. liegt es ja an was ganz anderen (?)
                        Code:
                        CREATE TABLE IF NOT EXISTS `nav` (
                          `id` int(10) unsigned NOT NULL auto_increment,
                          `label` varchar(255) NOT NULL,
                          `icon` varchar(255) NOT NULL,
                          `ppos` varchar(255) character set ascii NOT NULL,
                          `ntype` enum('label','icon') character set ascii NOT NULL default 'label',
                          `ptype` enum('txt','file','uri','sys') character set ascii NOT NULL default 'txt',
                          `file` varchar(255) NOT NULL,
                          `uri` varchar(255) NOT NULL,
                          `page` varchar(255) NOT NULL,
                          `sort` tinyint(4) NOT NULL,
                          PRIMARY KEY  (`id`)
                        ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;
                        
                        --
                        -- Daten für Tabelle `nav`
                        --
                        
                        INSERT INTO `nav` (`id`, `label`, `icon`, `ppos`, `ntype`, `ptype`, `file`, `uri`, `page`, `sort`) VALUES
                        (40, 'Login', '', 'footer_navi', 'label', 'sys', '', '', 'kundenlogin', 4),
                        (28, 'Kuchen', '', 'logo_navi', 'label', 'txt', '', '', 'none', 3),
                        (32, 'Impressionen', '', 'logo_navi', 'label', 'sys', '', '', 'galerie', 6),
                        (29, 'Produktion', '', 'logo_navi', 'label', 'txt', '', '', 'none', 4),
                        (30, 'Angebot', '', 'logo_navi', 'label', 'txt', '', '', 'none', 5),
                        (39, 'Impressum', '', 'footer_navi', 'label', 'sys', '', '', 'impressum', 3),
                        (38, 'Kontakt', '', 'footer_navi', 'label', 'sys', '', '', 'nachricht', 2),
                        (37, 'Anfahrt', '', 'footer_navi', 'label', 'txt', '', '', 'none', 1),
                        (42, 'Wir über Uns', '', 'logo_navi', 'label', 'txt', '', '', 'none', 1),
                        (41, 'Eis', '', 'logo_navi', 'label', 'txt', '', '', 'none', 2);

                        Kommentar


                        • #13
                          Code:
                          mysql> SELECT GROUP_CONCAT(t.sort SEPARATOR ', ') sort, GROUP_CONCAT(t.label SEPARATOR ', ') label FROM (SELECT sort, label, ppos FROM nav ORDER BY sort ASC) t GROUP BY t.ppos;
                          +------------------+--------------------------------------------------------------+
                          | sort             | label                                                        |
                          +------------------+--------------------------------------------------------------+
                          | 1, 2, 3, 4       | Anfahrt, Kontakt, Impressum, Login                           |
                          | 1, 2, 3, 4, 5, 6 | Wir über Uns, Eis, Kuchen, Produktion, Angebot, Impressionen |
                          +------------------+--------------------------------------------------------------+
                          2 rows in set (0.00 sec)
                          Zitat von nikosch
                          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                          Kommentar


                          • #14
                            ARGGHHH... irgendwas läuft schief.
                            Die Ausgabe scheint korrekt zu sein.

                            Nur weicht diese von meiner ab-... trotz 100%tiger Übernahme.
                            Hab es auch schon in einer neuen leeren Datei reingepackt... gleiche ausgabe:

                            PHP-Code:
                            <?php
                            include $_SERVER['DOCUMENT_ROOT'] . '/config.inc';

                            $host        MYSQL_HOST;
                            $user         MYSQL_USER;
                            $passwort    MYSQL_PASS;
                            $dbname        MYSQL_DATABASE;

                            $vorhandene_navipunkte SQL::sqlObjects("SELECT GROUP_CONCAT(t.sort SEPARATOR ', ') sort, GROUP_CONCAT(t.label SEPARATOR ', ') label FROM (SELECT sort, label, ppos FROM nav ORDER BY sort ASC) t GROUP BY t.ppos;");

                            echo 
                            '<pre>';
                            print_r($vorhandene_navipunkte);
                            echo 
                            'test';
                            Ergibt:
                            Code:
                            Array
                            (
                                [0] => stdClass Object
                                    (
                                        [sort] => 4, 1, 2, 3
                                        [label] => Login, Anfahrt, Kontakt, Impressum
                                    )
                            
                                [1] => stdClass Object
                                    (
                                        [sort] => 4, 5, 6, 1, 2, 3
                                        [label] => Produktion, Angebot, Impressionen, Wir über Uns, Eis, Kuchen
                                    )
                            
                            )
                            test
                            Ich versuch es jetzt mal wie du über die shell. Alles sehr eigenartig !!!

                            Kommentar


                            • #15
                              ich bekomm n knall.... auf der shell klappt das.
                              Also mut ja was an meiner SQL-function sein. Nur die verwende ich schon ewig... und hatte noch nie Probleme.
                              Letztendlich druchlaufe ich doch auch nur das, was ich von SQL zurückgeliefert bekomme. Also grad versteh ich so einiges nicht mehr.

                              Hast du mal die Musse, folgendes mal in php zu legen.
                              Den include raus und unten deine SQL-Daten eintragen. Dann sollte es schon gehen.

                              Ich wechsel jetzt mal den Server... kann ja irgendwie nicht sein ...
                              PHP-Code:
                               <?php
                              include $_SERVER['DOCUMENT_ROOT'] . '/config.inc';

                              $host        MYSQL_HOST;
                              $user         MYSQL_USER;
                              $passwort    MYSQL_PASS;
                              $dbname        MYSQL_DATABASE;

                              $vorhandene_navipunkte SQL::sqlObjects("SELECT GROUP_CONCAT(t.sort SEPARATOR ', ') sort, GROUP_CONCAT(t.label SEPARATOR ', ') label FROM (SELECT sort, label, ppos FROM nav ORDER BY sort ASC) t GROUP BY t.ppos;");

                              echo 
                              '<pre>';
                              print_r($vorhandene_navipunkte);
                              echo 
                              'test'


                              class 
                              SQL
                              {
                                static public 
                              $db null;

                                static public function 
                              sql_Connect()
                                {
                                  
                              self::$db = @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die("Bei dem Verbindungsaufbau mit der Datenbank ist ein Fehler aufgetreten.<br>Bitte versuche es in wenigen Minuten nochmals.");
                                  
                              mysql_select_db(MYSQL_DATABASE) OR die("Die Verbindung mit der Datenbank konnte zwar hergestellt werden, jedoch gab es Probleme beim Ausw?hlen der Datenbank.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte Probieren Sie es sp?ter noch einmal.");

                                  
                              self::sqlDo("SET CHARSET utf8");
                                  
                              self::sqlDo("SET NAMES utf8");
                                }
                                
                                static public function 
                              sqlDo($Sql)
                                {
                                  if (
                              false === is_resource(self::$db)) self::sql_Connect();

                                  
                              $Res mysql_query($Sql);
                                  if (
                              false === $Res)
                                  {
                                      
                              print_r($Res);
                                  }
                                  return 
                              $Res;
                                }

                                  static public function 
                              sqlObjects($sql)
                                  {
                                      
                              $r self::sqlDo($sql);
                                      
                              $o = array();
                                      while (
                              $t mysql_fetch_object($r)) array_push($o$t);
                                      return 
                              $o;
                                  }
                                  
                              }

                              Kommentar

                              Lädt...
                              X