MySQL: Zwei unterschiedliche Tabellen zu einer temporären zusammenfügen

Friesi

Erfahrenes Mitglied
[gelöst] MySQL: Zwei unterschiedliche Tabellen zu einer zusammenfügen

Hallo

ich habe zwei Tabellen die ähnliche Spalten haben, aber für jeweils einen anderen Zweck bestimmt sind.
Es gibt die Tabelle News und die Tabelle Artikel. Diese besitzen unter anderem drei gleiche Spalten: tTitle, tMessage und dDate.

Nun möchte ich eine RSS Datei erstellen, in welche die letzten News & Artikel zusammen ausgeben werden. (nach dDate (beide UNIX Timestamp) sortiert).

Man könnte natürlich zwei SELECT Anweisungen in der Programmlogik ausführen und in ein Array schreiben welches nach der Datumspalte sortiert wird.
Allerdings würde ich es gerne in der Datenbanklogik hinterlegen (View, SP oder temporäre Tabelle) und diese aus der Programmlogik aufrufen.

Da die Tabellen aber keine gleichen Schlüsselwert haben, fällt ein JOIN weg.

Ist das überhaupt in der Datenbanklogik möglich? Oder muss ich es in der Programmlogik mit einem Array realisieren?

Die temporäre Tabelle oder der View sollte dieses Ausgabeformat haben:
Code:
tTitle | tMessage | id | typ | dDate

typ wäre dann N für News Tabelle oder A für Artikel-Tabelle.
id die pNewsID oder pArticleID aus der jeweiligen Tabelle.

Die Datenbankstruktur der beiden Tabellen sieht so aus:

Article:
SQL:
CREATE TABLE article (
  pArticleID int(11) NOT NULL auto_increment,
  fUserID smallint(6) NOT NULL,
  fCatArticleID int(11) NOT NULL,
  tTitle varchar(50) NOT NULL,
  tMessage text NOT NULL,
  dDate int(11) NOT NULL,
  toDelete tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (pArticleID)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

News:
SQL:
CREATE TABLE news (
  pNewsID int(11) NOT NULL auto_increment,
  fUserID smallint(6) NOT NULL,
  tTitle varchar(50) NOT NULL,
  tMessage text NOT NULL,
  dDate int(11) NOT NULL,
  toDelete tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (pNewsID)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Vielleicht gibts ja einen findigen DB Guru der mir einen Tipp geben kann :)

EDIT Lösung:
Nach dem Erstellen bin ich dann doch noch selber drauf gekommen. Durch das ganze "Problembeschreiben" hat es klickt gemacht.

Hier die Lösung:
Ich habe mir nun ein View mit UNION erstellt
SQL:
CREATE  ALGORITHM = UNDEFINED VIEW `getRSS`  AS (
SELECT tTitle AS title, tMessage AS message, dDate AS Datum, pNewsID AS id, 'n' AS
TYPE FROM news
WHERE toDelete =0
)
UNION (

SELECT tTitle AS title, tMessage AS message, dDate AS Datum, pArticleID AS id, 'a' AS
TYPE FROM article
WHERE toDelete =0
)
ORDER BY Datum DESC
LIMIT 0 , 20
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück