Ankündigung

Einklappen
Keine Ankündigung bisher.

Spezielle Mysql/PHP Query

Einklappen

Neue Werbung 2019

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

  • Spezielle Mysql/PHP Query

    moin moin allerseits. ich stehe hier vor einem problem.
    folgendes steht in der datenbank

    Code:
    car->ford blue,price -> 5000,date -> 2014-08-04
    car->ford blue,price -> 5250,date -> 2014-08-06
    car->ford blue,price -> 4320,date -> 2014-08-05
    ...
    
    car->seat white,price -> 3000,date -> 2014-08-04
    car->seat white,price -> 3400,date -> 2014-08-05
    car->seat white,price -> 6480,date -> 2014-08-06
    ...
    
    car->vw black,price -> 6300,date -> 2014-08-04
    car->vw black,price -> 3400,date -> 2014-08-05
    car->vw black,price -> 6480,date -> 2014-08-06
    nun brauche ich eine query die mir folgende ausgabe beschert.

    zeige den neuesten eintrag
    Code:
    car->ford blue,price -> 5250,date -> 2014-08-06
    und den eintrag vor dem neuesten
    Code:
    car->ford blue,price -> 4320,date -> 2014-08-05
    das für jede automarke

    es werden jeden tag die preise angepasst und ich möchte gerne den aktuellen preis und den letzten alten preis anzeigen lassen.

    ich steh da iwi vollkommen auf dem schlauch -.-

    wäre toll wenn mir da jemand helfen könnte

    grüße
    nart

  • #2
    Wenn das wirklich die Tabellenstruktur ist, solltest du dich erstmal mit Normalisierung beschäftigen, bevor du da irgendwas weiterentwickelst.
    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

    Kommentar


    • #3
      Zitat von ApoY2k Beitrag anzeigen
      Wenn das wirklich die Tabellenstruktur ist, solltest du dich erstmal mit Normalisierung beschäftigen, bevor du da irgendwas weiterentwickelst.
      ok sorry die db schaut genau so aus.

      id
      car
      price
      date

      die farben habe ich nur zur veranschaulichung dazu geschrieben.

      Kommentar


      • #4
        Vermutlich hast du mit sowas Glück:

        Code:
        select car, price, date from cars where car = 'ford' order by date desc limit 0,2
        Ist aber nur geraten
        [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

        Kommentar


        • #5
          ne leider nicht ganz. ich brauche ja von jedem auto den heutigen und den letzten preis.

          hmm

          Kommentar


          • #6
            Das von ApoY2k gibt dir die letzten zwei Preise (von Ford), sortiert nach dem Datum.
            Sprich den neuesten und den "zweitneuesten" Preis.
            No Sacrifice , no Glory--

            Kommentar


            • #7
              von jedem auto
              Grade das wird schwierig in nur einer Anweisung... es erfordert eine Gruppierung, aber von jeder Gruppe 2 Datensätze (was IMHO nicht möglich ist mit nur einer Anweisung - wobei jetzt gleich vermutlich akretschmer auftaucht und eine passende PG Lösung präsentiert )
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Google: mysql groupwise limit

                Kommentar


                • #9
                  Zitat von lstegelitz Beitrag anzeigen
                  Grade das wird schwierig in nur einer Anweisung... es erfordert eine Gruppierung, aber von jeder Gruppe 2 Datensätze (was IMHO nicht möglich ist mit nur einer Anweisung - wobei jetzt gleich vermutlich akretschmer auftaucht und eine passende PG Lösung präsentiert )
                  hehe Ja, da geht das easy.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    naja easy ist es für mich gerade nicht. hab jetzt versuche mit GROUP_CONCAT gestartet aber von der lösung bin ich noch meilenweit entfernt.

                    *grübel*

                    Kommentar


                    • #11
                      Zitat von Nartrisse Beitrag anzeigen
                      naja easy ist es für mich gerade nicht. hab jetzt versuche mit GROUP_CONCAT gestartet aber von der lösung bin ich noch meilenweit entfernt.

                      *grübel*
                      Code:
                      test=*# select * from auto;
                         auto   |   datum    | preis
                      ----------+------------+-------
                       mercedes | 2014-08-01 |   100
                       mercedes | 2014-08-06 |   120
                       mercedes | 2014-08-07 |   121
                       opel     | 2014-08-05 |   200
                       opel     | 2014-08-06 |   210
                       opel     | 2014-08-07 |   209
                      (6 rows)
                      
                      test=*# select *, row_number() over (partition by auto order by datum desc) as nummer from auto;                          
                      auto   |   datum    | preis | nummer
                      ----------+------------+-------+--------
                       mercedes | 2014-08-07 |   121 |      1
                       mercedes | 2014-08-06 |   120 |      2
                       mercedes | 2014-08-01 |   100 |      3
                       opel     | 2014-08-07 |   209 |      1
                       opel     | 2014-08-06 |   210 |      2
                       opel     | 2014-08-05 |   200 |      3
                      (6 rows)
                      
                      test=*# select * from (select *, row_number() over (partition by auto order by datum desc) as nummer from auto) foo where nummer <= 2;
                         auto   |   datum    | preis | nummer
                      ----------+------------+-------+--------
                       mercedes | 2014-08-07 |   121 |      1
                       mercedes | 2014-08-06 |   120 |      2
                       opel     | 2014-08-07 |   209 |      1
                       opel     | 2014-08-06 |   210 |      2
                      (4 rows)
                      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                      Kommentar


                      • #12
                        moin, danke für deine hilfestellung, jetzt muss ich das nur noch in MySql hinkriegen -.-

                        *edit*
                        ein netter kollege aus einem anderen forum hat mir da auch sehr gute hilfestellung gegeben. nun falls jemand auch mal sowas in mysql braucht

                        Code:
                        SELECT *
                            FROM cars c1
                            WHERE c1.id = (SELECT id FROM cars c2 WHERE c2.car=c1.car ORDER BY date DESC LIMIT 1)
                               OR c1.id = (SELECT id FROM cars c2 WHERE c2.car=c1.car ORDER BY date DESC LIMIT 1,1)
                            ORDER BY car,date DESC
                        ich war da auch schon fast soweit, hab aber wohl über zuviele ecken und kanten nachgedacht.

                        danke nochmals an alle!!

                        grüße
                        narti

                        Kommentar

                        Lädt...
                        X