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

  • Nartrisse
    hat ein Thema erstellt Spezielle Mysql/PHP Query.

    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

  • Nartrisse
    antwortet
    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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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)

    Einen Kommentar schreiben:


  • Nartrisse
    antwortet
    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*

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • erc
    antwortet
    Google: mysql groupwise limit

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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 )

    Einen Kommentar schreiben:


  • Sakron
    antwortet
    Das von ApoY2k gibt dir die letzten zwei Preise (von Ford), sortiert nach dem Datum.
    Sprich den neuesten und den "zweitneuesten" Preis.

    Einen Kommentar schreiben:


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

    hmm

    Einen Kommentar schreiben:


  • ApoY2k
    antwortet
    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

    Einen Kommentar schreiben:


  • Nartrisse
    antwortet
    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.

    Einen Kommentar schreiben:


  • ApoY2k
    antwortet
    Wenn das wirklich die Tabellenstruktur ist, solltest du dich erstmal mit Normalisierung beschäftigen, bevor du da irgendwas weiterentwickelst.

    Einen Kommentar schreiben:

Lädt...
X