[MySQL 4.1] Erst sortieren dann gruppieren?

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

  • [MySQL 4.1] Erst sortieren dann gruppieren?

    Hi, ich hab ein kleines Problem beim Auslesen von Datenbankeinträgen mit PHP/MySQL.

    Und zwar hab ich eine Tabelle die (u.A.) eine UserID enthält und ein Datum.
    Nun möchte ich ganz einfach zu jeder UserID den Datensatz ausgeben, der den höchsten Timestamp enthält.

    Ich will also die Tabelle erst nach dem Timestamp ordnen und erst danach nach der UserID gruppieren.

    So
    SELECT * FROM `abi_mapdata` GROUP BY `userid` ORDER BY date_bis DESC
    funktionierts zumindest nicht...

    Ich probier jetzt schon seit ewigkeiten rum, finde aber keine Lösung dazu... :-(
    Kann mir vielleicht jemand von euch weiterhelfen?

  • #2
    Re: [MySQL 4.1] Erst sortieren dann gruppieren?

    Original geschrieben von Jaws
    Ich will also die Tabelle erst nach dem Timestamp ordnen und erst danach nach der UserID gruppieren.
    Warum? Was spielt es denn für ne Rolle was du zuerst machst? Was is denn anders am Ergebnis? Was Gefällt dir an deinem aktuellen Ergebnis nicht?
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      http://www.php-resource.de/forum/sho...threadid=76487

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Ups... nein du hast natürlich recht.

        Lösung:

        PHP-Code:
        SELECT useridMAX(date_bis) as last_date FROM abi_mapdata GROUP BY userid
        Tested, working
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          hm, also bei mir funktioniert des nicht ganz so wie ichs mir wünsche *g*

          das MAX(date_bis) sucht mir zwar den größten eintrag raus, aber mit folgenden Daten erhalte ich das größte Datum aus Zeile 4 aber alle anderen felder aus zeile 1

          PHP-Code:

          -- 
          -- 
          Tabellenstruktur für Tabelle `abi_mapdata`
          -- 

          CREATE TABLE `abi_mapdata` (
            `
          idint(6NOT NULL auto_increment,
            `
          useridint(4NOT NULL default '0',
            `
          date_vonvarchar(30character set latin1 collate latin1_german1_ci NOT NULL default '',
            `
          date_bisvarchar(30character set latin1 collate latin1_german1_ci NOT NULL default '',
            
          PRIMARY KEY  (`id`)
          ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=14 ;

          -- 
          -- 
          Daten für Tabelle `abi_mapdata`
          -- 

          INSERT INTO `abi_mapdata`(`id`, `userid`, `date_von`, `date_bis`) VALUES
          (121'1158530400''1160422384'),
          (
          111'1157407200''1159999200'),
          (
          131'1157407200''1175681246'),
          (
          91'1159999200''1160422384'); 
          Die Abfrage
          PHP-Code:
          SELECT idMAX(date_bis) as last_date FROM abi_mapdata GROUP BY userid
          liefert mir also das Ergebnis
          12 |...| 1175681246

          Richtige Ausgabe müsste sein:
          13 |...| 1175681246

          Kommentar


          • #6
            habs jetzt mit einem Workaround gelöst...
            Und zwar lese ich erst die kompletten Datenbankdaten aus, absteigend geordnet nach "date_bis"

            und dann mach ich in php weiter...

            in der schleife prüfe ich ob die ausgelesene userid in einem speziellen array vorkommt, wenn nicht, dann schreib ich sie dort rein und gebe die daten aus.
            wenn also die schleife zu einem zweiten eintrag mit der userid x kommt, dann wird die userid im array gefunden und der datensatz wird nicht ausgegeben...


            so klappt's jetzt prima, wenn jemand aber noch ne reine SQL-Lösung hätte würd mich des auch freuen :-)

            Kommentar

            Lädt...
            X