2009-08-10 9 views
0

Ich habe drei Tabellen, die jeweils eine automatisch inkrementierende PK enthalten. Ich muss die letzten (dh ORDERBY DESC) Einträge aus dem Mix dieser Tabellen auswählen. Ich möchte es in einer Abfrage mit zwei Joins tun. Meine Idee war, irgendwie eine Tabelle auszuwählen, sie durch id DESC zu ordnen, dann irgendwie die Ergebnisse zusammenzuführen. Hat jemand eine Möglichkeit (oder wahrscheinlich eine bessere Idee), dies zu tun?orderby Anweisungen für mehrere Joins

(mit mysql) EDIT: Sorry - hier ist ein detaillierteres spec: Ich habe drei Tabellen, posts, stories, favs. Jeder hat (mindestens) drei Spalten id, uid und date. Sie sind beide PK's. id auto-increments (separat für jede Tabelle). uid ist FK, aber das ist irrelevant. Ich brauche das Ergebnis, das die letzten 20 oder 30 Einträge enthält.

+2

In welche Felder möchten Sie einsteigen? meinst du gemeinschaftsunion? – Zed

Antwort

0

Da die Tabellen keine Beziehung haben, macht das Zusammenfügen keinen Sinn, oder?

Soweit ich verstanden habe, möchten Sie Datensätze aus 3 verschiedenen Tabellen in einem Ergebnis nach ihrem Erstellungsdatum bestellen. Es gibt zwei Möglichkeiten, dies zu erreichen:

  1. Verwenden Sie eine PK, die sortierbar und einzigartig für alle 3 Tabellen ist. Ich weiß, Sie können dies leicht in PostgreSQL tun. In MySQL benötigen Sie eine Problemumgehung: Erstellen Sie eine vierte Tabelle mit einem Auto-Inkrement PK und ändern Sie die anderen 3 Tabellen PK zu einem FK, der auf die 4. Tabelle PK zeigt. Dies ist etwas umständlich und Sie müssen sich bewusst sein, dass ein Auto-Inkrement-Feld kein guter Kandidat für eine zuverlässig sortierbare Eigenschaft ist (das Löschen von Datensätzen führt zu Lücken in der Sequenz, die später gefüllt werden können).

  2. Fügen Sie eine Spalte created zu jeder der 3 Tabellen hinzu und speichern Sie das Erstellungsdatum jedes Datensatzes. Die UNION kann dann nach dieser Spalte sortiert werden. Sie haben bereits eine Spalte date. Kannst du diese Spalte nicht benutzen?