Die letzten 10 Einträge aus 3 Tabellen...

Sebigf

Erfahrenes Mitglied
Hallo zusammen !

Ich wollte eine "Latest Posts" Funktion erstellen, die die letzten 10 Einträge aus der Datenbank von drei verschiedenen Tabellen ausgibt...

Nur wie gehe ich das am besten vor ? Soll ich das ganze irgendwie mit JOINs machen?

Ich habe irgendwie keinen Plan, wie ich da am besten / sinnvollsten vorgehen soll...

Danke
 
Hi,

1. Wäre es dabei interessant, welches DBMS du nutzt. Das Limitieren von Datensätzen funktioniert nämlich überall anders.
2. brauchst du ein Attribut in den Tabellen, das Datenbankweit eindeutig ist.
3. wirst du einen View brauchen, mit dem du diese 3 Tabellen "vereinigen" kannst (Stichwort UNION)
4. dann kannst mit JOINs die Daten von deinen Tabellen abfragen
 
Sorry, mal wieder verpennt ;)

- MySQL
- Eigentlich nur die Sortierung muss durch ID DESC geregelt werden
- UNION ? Werde ich mir sofort mal anschauen
- OK ;)
 
Ich habe es nun einmal mit UNION probiert und mir auch die DOC auf dev.mysql.com durchgelesen. Sieht alles sehr einleuchtend aus, aber es geht trotzdem nicht.

"The used SELECT statements have a different number of columns"

Das erhalte ich beim Versuche 2 Tabellen testweise auszulesen...
Es handelt sich dabei um 2 Tabellen mit jeweils verschiedenen Feldern. Es gibt keinerlei gleichheiten zwischen diesen beiden.

Oder geht das ganze nur mit einer bestimmten ID (siehe JOIN)... ?

Danke
 
Hi,

Wenn es keine Gemeinsamkeiten bei den Tabellen gibt, kannst du UNION auch nicht nutzen.
Für UNION müssen die abgefragenten Spalten von der Anzahl und vom Datentyp her übereinstimmen.
Wenn du aber keine Gemeinsamkeiten in den Tabellen hast, wie willst die Datensätze miteinander vergleichen?
Wie bereits erwähnt, brauchst du in jeder Tabelle ein Feld, welches über die betroffenen Tabellen hinweg eindeutig ist.
 
Mmh, habe ich es mir doch gedacht ;)

Also noch einmal...

Ich habe 3 Tabellen:

- Nachrichten
- Artikel
- Blogs

Jeder Entry in diesen Tabellen wird mit DATETIME gespeichert. Nun wollte ich ein "Latest Entrys" machen, wo alle drei Tabellen durchsucht werden und nach der ID oder Datum ausgegeben werden. Also will ich alle Tabellen zusammenfassen und nach dem Datum ausgeben. Dies aber auch nur mit 10 Items.

Beispiel:

- Nachrichten-Eintrag vom 01.06.
- Blog-Eintrag vom 02.06.
- Nachrichten-Eintrag vom 05.06.
- Artikel-Eintrag vom 10.06.
- Artikel-Eintrag vom 11.07.
- Blog-Eintrag vom 12.07.
...

Wie du siehst, werden die letzten (6) Einträge aus allen 3 Tabellen auslesen...

Verstehst du, was ich meine ?
 
Du kannst ja in den 3 SELECTS dafür sorgen, dass die Feldanzahl und die Datentypen gleich sind. Das Ergebnis der 3 SELECTS packst Du in ein Subquery, sortierst absteigend nach dem Timestamp und LIMITierst auf 10. Etwa so:
SQL:
SELECT * FROM
  (

    (
      SELECT
        `zeit`,
        CONCAT('Nachrichten-Eintrag vom ', DATE_FORMAT(`zeit`, '%d.%m.%Y')) AS `eintrag`
      FROM
        `nachrichten`
      ORDER BY
        `zeit` DESC
      LIMIT 10
    )

    UNION ALL

    (
      SELECT
        `zeit`,
        CONCAT('Artikel-Eintrag vom ', DATE_FORMAT(`zeit`, '%d.%m.%Y'))
      FROM
        `artikel`
      ORDER BY
        `zeit` DESC
      LIMIT 10
    )

    UNION ALL

    (
      SELECT
        `zeit`,
        CONCAT('Blog-Eintrag vom ', DATE_FORMAT(`zeit`, '%d.%m.%Y'))
      FROM
        `blogs`
      ORDER BY
        `zeit` DESC
      LIMIT 10
    )

  ) AS `alle`

ORDER BY
  `zeit` DESC
LIMIT 10
 
Zuletzt bearbeitet von einem Moderator:
Zurück