Postgresql查询问题

时间:2016-03-21 18:25:34

标签: php postgresql

所以我有一个问题,我试图解决几个星期,但我没有找到任何解决方案。所以这是我正在尝试查询的表: Tables

我显然加入了他们(简单):

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';

现在出现了问题:我想按日期desc排序并区分它们,以便最后一行插入的行(最新日期)是第一行。但是一旦他们得到区分,结果就很奇怪了。我试过这个:

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;

这是有效的,虽然一旦我尝试了distinctig a.book_fk结果是错误的:

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;

我甚至尝试过像这样的方法,但没有成功:

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

有人可以帮助我吗?我会很开心的!谢谢!

1 个答案:

答案 0 :(得分:0)

听起来你正试图在每本书中获得一行,具有最新的用户/状态?在这种情况下,这应该有效:

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
;