[SQL] mehrere Tabellen zusammenfügen und nach Datum sortieren

cppnap

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
487
Guten Tag,

ich habe insgesamt 4 Tabellen in SQL, die zusammengeführt und dann anschließend nach Erscheinungsdatum sortiert werden müssen. Ich habe eine Tabelle für Rezepte und Artikel - beide Tabellen sind in Kategorien unterteilt für Die es eine Verknüpfungstabelle gibt.

Ich möchte nun anhand von einer bestimmten Anzahl von Kategorien alle Rezepte und Artikel heraus lesen und diese chronologisch sortiert ausgeben.

An sich scheint mein SQL-Query bereits zu funktionieren, ich möchte eigentlich mehr oder weniger eine Absegnung ob das so okay ist bzw. wo und wie man das verbessern könnte :-)

Code:
SELECT *
FROM
(
  SELECT * 
  FROM  recipes
  JOIN  recipes_categories

  ON    recipes_categories.element = recipes.uid
  WHERE recipes_categories.category IN ( 193, 219, 220, 221 )
    AND recipes.deleted = '0'
    AND recipes.hidden = '0'

UNION ALL

  SELECT *
  FROM  articles
  JOIN  articles_categories
      
  ON articles_categories.element = articles.uid
  WHERE articles_categories.category IN ( 193, 219, 220, 221 )
    AND articles.deleted = '0'
    AND articles.hidden = '0'
) T
ORDER BY T.crdate


Zusatzfrage: Ich bin auf der Suche nach einem ORM Framework für PHP damit ich die Abfragen in Zukunft etwas abstrahierter und eleganter einpflegen kann. Es handelt sich hierbei oft nur um 100te Datensätze um die es geht aber es sind viele kleine Abfragen, die ich nicht ständig neu coden will.

Jemand eine Empfehlung? :-)
 
Servus

Dein vorgezeigtes Query geht ja zwei mal auf die selbe Tabelle, dafür ist das ok.

Wenn du aber, wie du schreibst, 4 verschieden Tabellen hast, würde ich auf SELECT * verzichten und lieber die jeweiligen Spalten fix angeben. Andernfalls fällt das Query auf die Nase, wenn eine der 4 Tabellen verändert wird.

Grüssle
 
Die Spalten sind bereits alle schon fix angegeben und werden auch ordentlich ausgelesen.

Da es sich hierbei aber schon um sehr viele Spalten handelt, habe ich für den Post aus
Übersichtsgründen einfach das * gesetzt :-)
 
Zurück
Oben