2016-03-21 10 views
0

so habe ich ein Problem, das ich versuche, seit ein paar Wochen zu lösen, aber ich komme zu keiner Lösung. Also hier sind die Tabellen, die ich versuche, eine Abfrage zu machen auf: TablesPostgresql Abfrage Problem

ich sie natürlich verbunden (leicht):

SELECT a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active'; 

Jetzt kommt das Problem: ich die Zeilen bestellen möchten durch date desc und distinct sie, so dass die letzte eingefügte Zeile (mit dem neuesten Datum) die erste Zeile ist. Aber die Ergebnisse sind sehr merkwürdig, wenn sie erst einmal ausgezeichnet wurden. Ich versuchte dies:

SELECT a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' ORDER BY a.date DESC; 

das funktioniert, obwohl ich einmal distinctig a.book_fk Ergebnisse sind falsch versuchen:

SELECT DISTINCT ON(a.book_fk)a.book_fk,a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' ORDER BY a.date DESC; 

ich sogar versucht, Ansätze wie diese, aber ohne Erfolg:

SELECT * FROM (SELECT DISTINCT 
ON(a.book_fk)a.book_fk,a.date,b.title,b.author,u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active') res ORDER BY res.date DESC 

Könnte mir jemand helfen? Ich wäre sehr glücklich! Vielen Dank!

+0

Es tut mir leid, einige Spaltennamen – Nano

+0

hier falsch waren, sieht das Styling und erneut bearbeiten. –

+0

Vielen Dank! – Nano

Antwort

0

Es klingt wie Sie versuchen, eine Zeile pro Buch mit dem neuesten Benutzer/Status zu bekommen? In diesem Fall sollte diese Arbeit:

SELECT DISTINCT ON(a.book_fk) 
     a.book_fk, a.date, b.title, b.author, u.nick 
FROM book_add a 
INNER JOIN user u on(a.user_fk=u.id) 
INNER JOIN book b on (a.book_fk=b.id) 
INNER JOIN status s ON(a.status_fk=s.id) 
WHERE s.description='active' 
ORDER BY a.book_fk, a.date DESC 
; 
+0

Danke für die Antwort. Das ist es, was ich versuche zu erreichen, aber irgendwie ist das Datum, das aus drei gleichwertigen Büchern ausgewählt wird, nicht das neueste, und wegen dieses kleinen Details wird es nicht richtig geordnet – Nano