Suche nach einer möglichkeit in der GROUP BY zu sortieren z.B. nach Datum

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

  • Suche nach einer möglichkeit in der GROUP BY zu sortieren z.B. nach Datum

    Hallo,


    ich hab da mal eine kleine Frage an euch, ist es möglich in einer SQL-Query mit GROUP BY zu sortieren bzw zu steuern das der aktuellste datensatz zurgegeben wird?

    natrürlich muss dann auch die ID des Datensatzes passen also es darf sich nicht nur innerhalb einer Spalte was ändern.

    die erste Tabelle
    Code:
    mysql> SELECT * FROM products p;
    +--------+-----------------------------+---------------+----------------+
    | pdt_id | product_descriptions_pdn_id | pdt_ean       | pdt_time       |
    +--------+-----------------------------+---------------+----------------+
    |      1 |                           1 | 3403840928409 | 20040112201209 |
    |      2 |                           1 | 4043956039453 | 20070104201209 |
    +--------+-----------------------------+---------------+----------------+
    2 rows in set (0.00 sec)
    so und nun die Group By anweisung



    Die zweite Tabelle
    Code:
    mysql> SELECT * FROM product_descriptions p;
    +--------+-----------------+----------+
    | pdn_id | pdn_title       | pdn_text |
    +--------+-----------------+----------+
    |      1 | Classic Slip-On | NULL     |
    +--------+-----------------+----------+
    1 row in set (0.00 sec)
    Left join aus den oberen beiden Tabellen
    Code:
    mysql> SELECT pdt_id , pdt_ean , pdn_title , pdt_time FROM products 
    LEFT JOIN product_descriptions p ON product_descriptions_pdn_id =
     pdn_id;
    +--------+---------------+-----------------+----------------+
    | pdt_id | pdt_ean       | pdn_title       | pdt_time       |
    +--------+---------------+-----------------+----------------+
    |      1 | 3403840928409 | Classic Slip-On | 20040112201209 |
    |      2 | 4043956039453 | Classic Slip-On | 20070104201209 |
    +--------+---------------+-----------------+----------------+
    2 rows in set (0.00 sec)
    so und nun die Group By Anweisung
    Code:
    mysql> SELECT pdt_id , pdt_ean , pdn_title , max(pdt_time) 
    FROM products LEFT JOIN product_descriptions p ON 
    product_descriptions_pdn_id = pdn_id GROUP BY pdn_id;
    +--------+---------------+-----------------+----------------+
    | pdt_id | pdt_ean       | pdn_title       | max(pdt_time)  |
    +--------+---------------+-----------------+----------------+
    |      1 | 3403840928409 | Classic Slip-On | 20070104201209 |
    +--------+---------------+-----------------+----------------+
    1 row in set (0.00 sec)
    und da haben wir den salat, die EAN passt nicht mit dem timestamp übereinander und genau da liegt das Problem, wie bekomme ich das jetzt hin...

    .momai
    EDIT:
    Das nächste Mal sorgst du bitte selber durch Umbrüche dafür, dass man nicht meterweit querscrollen muss.
    Zuletzt geändert von wahsaga; 05.01.2007, 10:55.

  • #2
    Hi,

    ich verstehe Dein Problem nicht wirklich, aber würde es vielleicht helfen, wenn Du max(pdt_time) rausschmeisst, und dafür einfach absteigend nach pdt_time sortierst (ODER BY pdt_time DESC).
    Dann ist der erste Datensatz der mit dem höchsten pdt_time Wert.
    Vielleicht noch ein LIMIT 0,1 einbauen...

    Gruß,
    Dennis

    Kommentar


    • #3
      ich muss in dem GROUP BY sortieren , momentan gibt er mir in der GROUP BY sortieren den ältesten Datensatz der Gruppe aus und ich möchte einfach nur das GROUP BY den neusten bzw mit der höchsten pdt_id Datensatz in der Gruppe ausgibt

      Kommentar


      • #4
        Also Dein GROUP BY pdn_id ist die Ursache, du gruppierst nach einer Spalte, die nicht mal im ergebnisset enthalten ist. Unerwartete Ergebnisse sind da an der Tagesordnung
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          versuch mal order by pdt_id desc
          hab aber ka obs geht
          Für Rechtschreibfehler übernehme ich keine Haftung!

          Kommentar


          • #6
            also ich habe jetzt eine Lösung über PHP gefunden...bin zwar nicht so glücklich damit aber vielleicht versteht ihr jetzt mein Problem und könnt vielleicht ein gutes query draus basteln des dann auch funktioniert.

            Ich werd noch mal alles an Tabellen und ausgaben für euch posten um jetzt mal Kalrheit in die Sache zu bringen um eventuell meine Lösung zu verbessern

            Tabelle product_attributes
            Code:
            SELECT * FROM product_attributes ;
            +--------+-----------------------------+-------------------+
            | pda_id | product_descriptions_pdn_id | pda_img_uri       |
            +--------+-----------------------------+-------------------+
            |      1 |                           1 | classic_green.jpg |
            |      2 |                           1 | classic_blue.jpg  |
            |      3 |                           1 | classic_pink.jpg  |
            |      4 |                           2 | dunk_blue.jpg     |
            |      5 |                           3 | shox_gold.jpg     |
            |      6 |                           3 | shox_silver.jpg   |
            |      7 |                           4 | reglan_olive.jpg  |
            +--------+-----------------------------+-------------------+
            7 rows in set (0.00 sec)
            Tabelle product_descriptions

            Code:
            mysql> SELECT * FROM product_descriptions p;
            +--------+-----------------+----------+
            | pdn_id | pdn_title       | pdn_text |
            +--------+-----------------+----------+
            |      1 | Classic Slip-On | NULL     |
            |      2 | Dunk Low SP     | NULL     |
            |      3 | Shox NZ         | NULL     |
            |      4 | Reglan Polo     | NULL     |
            +--------+-----------------+----------+
            4 rows in set (0.00 sec)
            und durch folgendes Skripte habe ich mein gewünschtes Ziel erreicht halt leider über PHP hätte das gerne in SQL gelöst...wie gesagt vielleicht findet ja jetzt einer was...

            PHP-Code:
            <?php

            $host 
            "xxxxx";
            $user "xxxxx";
            $pass "xxxxx";
            $db "xxxxx";

            $link mysql_connect($host,$user,$pass);
            mysql_select_db($db$link);

            $query "SELECT MAX(pda_id) AS 'max_pda_id' FROM product_attributes
            GROUP BY product_descriptions_pdn_id ORDER BY max_pda_id DESC;"
            ;

            $result mysql_query($query);

            while(
            $dat mysql_fetch_array($result)){
            echo 
            $dat['max_pda_id'] . " ";
                    
            $query2 "SELECT * FROM product_attributes WHERE pda_id = " $dat['max_pda_id'] . ";";
                    
            $result2 mysql_query($query2);
                    while(
            $dat2 mysql_fetch_array($result2)){
                            echo 
            $dat2['pda_img_uri'] . "<br>";
                    }
            }

            ?>
            und aus diesem Skript erhalte ich im Browser folgende Ausgabe

            7 reglan_olive.jpg
            6 shox_silver.jpg
            4 dunk_blue.jpg
            3 classic_pink.jpg

            und so soll das dann auch sein...

            ich hoffe noch auf euch das ihr ne Idee habt


            .momai

            Kommentar


            • #7
              welcher Version von MySQL hast du? Wenn deine Version Sub-Select unter stützt, dann kannst du auch SQL-mäßig lösen

              Kommentar


              • #8
                von 3-5 auf verschiedenen Servern aber Subquery läuft glaube ich erst unter 4...

                kannst den Query-String mal hier rein schreiben in den Thread?


                .momai

                Kommentar

                Lädt...
                X