MySQL Abfrage über 2 Tabellen verknüpfen

  • Hallöle,


    ich bin mit meinen SQL Kenntnissen etwas in Bedrängnis geraten und komme, trotz Recherchen nicht sinnvoll weiter und brauche irgendwie etwas Hilfe ;)


    In der Datenbank sind 2 Tabellen vorhanden, eine Shop Tabelle und eine Produkttabelle, welche die Preisveränderungen zu den jeweiligen Produkten fortlaufend speichert. Nun möchte ich, über eine Abfrage die Shops mit alleinig dem jeweiligen letzten Produktpreis und Timestamp ausgeben, verknüpft werden die Tabellen mit der ID aus der Shop bzw. der ShopID aus der ProductPrices Tabelle.


    Tabelle Shop

    ID, Name, ....

    1, Kaufdort GmbH


    Tabelle ProductPrices

    ID, ShopID, Timestamp, Price, ...

    1, 1, 1647860000, 1,34

    2, 3, 1647863700, 1,89

    3, 1, 1647890099, 1,54


    Ich wäre euch sehr Dankbar, wenn ich mir helfen könntet :)

  • Mach einen Subselect mit LIMIT 1 order by für die Preise im Hauptselect mit dran.

    Um dir nen fertigen Select zu basteln bräuchte ich die Tabellen schon fertig um sie in ne DB zu jagen und dann selber drauf zu selektiere

    Mit einem Subselect hatte ich auch experimentiert, jedoch konnte ich immer nur ein Feld übermitteln, z.B. den Preis, dabei geht dann aber der Timestamp verloren. Oder ist die Lösung:

    SELECT ID, NAME, (SELECT Price FROM ProductPrices WHERE ID = ShopID ORDER BY TimeStamp LIMIT 1) AS Price, (SELECT Price FROM ProductPrices WHERE ID = ShopID ORDER BY TimeStamp LIMIT 1) AS TimeStamp FROM Shops

    ^^ Das wirkt jedoch etwas unsauber :wacko:

  • So vielleicht


    SQL
    SELECT s.ID,S.Name,
    (SELECT p.price
    FROM ProductPrices AS p
    WHERE p.ID = s.ID
    ORDER BY p.TimeStamp DESC
    LIMIT 1) AS price
    FROM Shops s

    Edit: Hopla zu langsam sorry...

  • SELECT s.*, p.* FROM Shop s, ProductPrices p WHERE s.id = p.shopid AND NOT EXISTS (SELECT p2.id FROM ProductPrices p2, WHERE p2.shopid = p.shopid AND p.timestamp < p2.timestamp)


    Falls ichs richtig interpretiert (und umgesetzt) habe.