Abfrage aus 2 Tabellen nach Datum sortieren

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

  • Abfrage aus 2 Tabellen nach Datum sortieren

    Hallo

    Davon abgesehen, dass ich ein ziemliche Anfänger bin , steh ich gerade ziemlich auf dem Schlauch
    Ich möchte aus zwei verschiedenen Tabellen Daten abfragen.
    Der Inhalt ist unterschiedlich.
    Ich möchte die letzten 3 Einträge aus beiden Tabellen.
    Also nicht jeweils 3, sondern die drei neusten unabhängig aus welcher Tabelle.

    Diese sollen danach mit eben mit dem entsprechenden Zeileninhalt ausgegeben werden.

    Versuche es mal amateurhaft stark vereinfacht darzustellen:

    Tabelle 1 = software: id, softwarename, text, daten, timestamp
    Tabelle 2 = hardware: id, hardwarename, kommentar, daten, timestamp

    Inhalt

    Software
    spiel1 1, Spiel1, text, daten, 16.01.2011
    programm1 2, Spiel2, text, daten, 19.01.2011
    spiel2 3 prog1, text, daten, 20.01.2011
    programm2 4 prog2, text, daten, 22.01.2011

    Hardware
    teil1 1, Spiel1, text, daten, 17.01.2011
    teil2 2, Spiel2, text, daten, 18.01.2011
    teil3 3, Spiel2, text, daten, 21.01.2011

    Ausgabe soll dann so aussehen

    Die letzten 3 Einträge:

    programm2 4, daten
    teil3 3, daten
    spiel2 3, daten


    Hoffe es war halbwegs verständlich.
    Über eine Hilfestellung würde ich mich sehr freuen.
    Vielen Dank.
    Zuletzt geändert von c2s; 22.01.2011, 12:25.

  • #2
    Hallo,

    meinst du jetzt zwei Datenbanken oder zwei Tabellen? Sollen die Daten in Beziehung gesetzt werden oder willst du sie nur zufällig spaltenweise ausgeben? Hast du eigene Ansätze? Welche Art Hilfe erwartest du jetzt?

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Entschuldigung, aus 2 Tabelle meinte ich.


      Es sollen nur die drei letzten Einträge aus dem Verbund beider Tabellen ausgegeben werden. Habs ja versucht mit dem Beispiel zu erklären, was ausgegeben werden soll

      Ansatz hab ich so wirklich gar keinen.
      Union geht ja nur bei gleicher Struktur und Join scheint mir irgendwie nicht das richtige oder ich versteh es einfach falsch.

      Code:
       
       $result = mysql_query("SELECT * FROM reviews, hardware  ORDER BY timestamp DESC LIMIT 3");
      Und so gehts schienbar nicht.
      Wie gesagt bin ziemlicher Anfänger bei sowas.

      Art der Hilfe? Naja, dass mir bitte jemand sagt wie ich das lösen kann.

      Danke

      Kommentar


      • #4
        Ich hätte erst gar nicht zwei Tabellen gemacht sondern alles in eine Tabelle gegeben. Bis auf die Tatsache das bei der einen Tabelle eine Spalte "text" benannt wird und beim anderen "kommentar", was irgendwie das selbe sein dürfte, seh ich da eigentlich keinen Unterschied.

        Kommentar


        • #5
          Hallo,

          das mit dem Text und dem Kommentar war nur ein Beispiel.

          Die Tabellen haben wesentlich mehr (unterschiedliche) Spalten, die aber für andere Abfragen benötigt werden.

          Ich hätte wohl auch keine zwei Tabellen gemacht, aber die Struktur ist nicht von mir angelegt worden.
          Die DB existiert schon eine ganze Weile und dementsprechend sind schon sehr viele Datensätze darin enthalten.

          Könnte man sie einfach zusammenlegen, hätte ich wohl auch den Weg gewählt.

          Dementsprechend wollte ich eben für diese Abfrage auf die oben gesuchte Lösung zurückgreifen.

          Kommentar


          • #6
            Dann ist JOIN schon trotzdem das richtige für dich und in der ON-Klausel verbindest du sie über die Spalte die bei beiden übereinstimmt.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Es gibt leider keine Spalten die inhaltlich genau gleich sind.

              Der Bezug soll ja das Datum sein, aber das ist ja immer anders.

              Gibt es da trotzdem eine Möglichkeit ?
              Zuletzt geändert von c2s; 22.01.2011, 15:28.

              Kommentar


              • #8
                Habe jetzt mit Join rumhantiert, komme aber auf keinen grünen Zweig.

                Kommentar


                • #9
                  Hallo,

                  dann zeige doch mal bitte Deine Versuche.
                  Dann kann man schauen wo man Dir Tipps geben kann.


                  LG Sven

                  Kommentar


                  • #10
                    Code:
                     $result = mysql_query("SELECT * FROM reviews  Full Outer JOIN hardware ON (reviews.timestamp != hardware.timestamp)ORDER BY timestamp DESC LIMIT 3" );
                    Das ist das letzte was ich versucht habe,.Wiegesagt, dass mit dem Join ist nicht so meins.
                    Nach meinem Verständniss müsste er jetzt alles zusammenfügen, bei dem der timestamp unterschiedlich ist. Also alles, da der immer anders ist.
                    Danach soll er nach dem timestamp sortieren. Aber da bekomme ich eben den Fehler, dass timestamp nicht eindeutig ist. Was ja eigentlich klar ist, da es ja den hardware und den preview timestamp gibt.
                    Bin nur anfangs davon ausgegangen, dass der timestamp dann zu einer Spalte zusammengefasst wird und er damit nur einmal vorkommt.

                    Kommentar


                    • #11
                      Wenn ich das richtig verstehe, hast Du zwei Tabellen. Dabei sollen für jede Tabelle die jeweils drei neusten/letzten Einträge ermittelt werden.
                      Nun sollen die Ergebnisse dieser beiden Abfrage verknüpft werden in der Weise, daß die jeweils neusten (auch wenn das Datum nicht übereinstimmt!) mit einander in Beziehung gesetzt werden.
                      Die Beziehung ist also mehr oder weniger willkürlich und sobald in einer Tabelle ein neuer Datensatz reinkommt, während jedoch die andere Tabelle unverändert bleibt, ändert sich die Beziehung. Es gibt somit keinerlei objektive Beziehung zwischen einzelnen Datensätzen aus diesen beiden Tabellen. Dann sollte man auch nicht versuchen über eine Abfrage eine solche nicht-existente Relation zu simulieren :-)

                      Erzeuge die Verknüpfung stattdessen in Deinem Skript, d.h. führe jeweils eine Abfrage über jede Tabelle aus:

                      $result_1 = mysql_query("SELECT * FROM reviews ORDER BY timestamp DESC LIMIT 3");
                      $result_2 = mysql_query("SELECT * FROM hardware ORDER BY timestamp DESC LIMIT 3");

                      und zeige das Ergebnis dann z.B. in einer Tabelle an oder lege das in einem Datenobjekt ab. Da beide Resultsets jeweils genau 3 Elemente haben, ist die Schleife darüber trivial.
                      Das ist letztlich vermutlich auch der schnellste Weg und zeigt vorallem auch im Code, daß es keine DB-Beziehung zwischen diesen beiden Tabellen gibt (Wartbarkeit und Lesbarkeit des Codes).

                      Gruß,
                      Wörni
                      Zuletzt geändert von Woerni; 23.01.2011, 11:47.

                      Kommentar

                      Lädt...
                      X