• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Limit auf Ergebnissumme mehrerer Tabellen

Status
Für weitere Antworten geschlossen.

Frank

Neues Mitglied
Hi,

Ich weiß, aus dem Titel wird man nicht besonders schlau, aber er beschreibt schon einigermaßen meine Problemstellung.

Irgendwie stehe ich gerade auf dem Schlauch und mir fällt nicht ein wie ich folgendes am besten löse (es sei gemerkt, dies findet noch alles auf theoretischer Ebene statt, die Datenbank/Tabellen gibt es noch nicht):

Gegeben sei eine Datenbank mit 4 Tabellen mit den Namen
  1. bug_reports
  2. feature_requests
  3. other_usercontributions
  4. official_news
Zur Vereinfachung sei nun angenommen, alle 4 Tabellen haben die Folgende gleiche Struktur (Felder)
  • Id (int, primary key, auto_increment)
  • Title (varchar 255)
  • Timestamp (int)
Nun gibt es auf der Seite eine art "Hot News" Bereich. Hier sollen die 5 neuesten Beiträge stehen, jedoch nicht aus einer Tabelle sondern aus allen 4 Tabellen. Das bedeutet ich müsste alle Einträge aus allen 4 Tabellen auswählen, sie nach dem Timestamp (DESC) Ordnen und dann mit Limit die Ausgabe auf die "obersten" 5 Ergebnisse einschränken.

Das ist mir soweit ja schon klar und bei einer Tabelle ist das auch kein Problem
Code:
SELECT `Id`, `Title` FROM `official_news` ORDER BY `Timestamp` DESC LIMIT 5
Doch nun komme ich nicht mehr weiter, wie mache ich diese Abfrage von mehr als einer Tabelle?
Ich könnte nun natürlich diese Abfrage an alle Tabellen senden und die Ergebnisse dann nocheinmal manuell aussortieren, doch ich möchte das eigentlich lieber direkt in der Abfrage erledigt haben.

Ich hoffe das war einigermaßen verständlich, ansonsten einfach "drauflosfragen" ^^

Danke und LG
 
Werbung:
Hallo,

das einfachste was mir gerade einfällt wäre folgendes:

Code:
SELECT 
 id,Title
FROM
 (SELECT
  *
 FROM
  bug_reports, feature_requests, other_usercontributions, official_news
 )
ORDER BY
 Timestamp DESC
LIMIT 
 5
Es ist natürlich nicht das schönste, aber ich denke so oder so ähnlich könnte es funktionieren.
Ich schätze du kannst die Unterabfrage auch weglassen, wenn du tatsächlich in jeder Tabelle den gleichen Aufbau hast.

Gruß
Voodoo
 
Naja, die verschiedenen Tabellen haben schon eine Unterschiedliche Struktur, aber die Felder die ich wissen möchte sind die gleichen in jeder Tabelle.

Dein Vorschlag sieht auf jeden Fall vielversprechend aus, aber ich werde ihn erst morgen ausprobieren, bin echt bettreif xD.

Vielen Dank aber schon einmal.
 
Werbung:
Ok,

Ich hab das gerade mal ausprobiert und muss sagen: Ich lag erschreckend weit daneben.
Was hier benötigt wird ist UNION. Ist zwar sehr unschön zum aufschreiben, klappt aber dafür ganz wunderbar:
Code:
 SELECT
  Id,Title,Timestamp
 FROM
  bug_reports
UNION ALL
 SELECT
  Id,Title,Timestamp
 FROM
  feature_requests
UNION ALL
 SELECT
  Id,Title,Timestamp
 FROM
  other_usercontributions
UNION ALL
 SELECT
  Id,Title,Timestamp
 FROM
  official_news
ORDER BY
 Timestamp
LIMIT
 5

Gruß
Voodoo
 
Ein JOIN ist meiner Meinung nach hier nicht die Lösung.
Bei JOIN werden die Spalten zusammengelegt, bei UNION die Zeilen.

Gruß
Voodoo
 
Werbung:
@Voodoo

Nunja, ein JOIN verknüpft Zeilen aus mehreren Tabellen zu einem Ergebnis, von daher denke ich schon das JOINs auch ein Schritt zur Lösung darstellen :D



Grüße
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben