Sequelize.js 使用无限滚动从不同条件获得的不同内容 我使用PASGRESV7.5,后继3.30.4和KOA.JS 2.3.0;我所经历的情况与instagram home feed类似,在instagram home feed中,帖子来自您关注的用户以及您关注的标签

Sequelize.js 使用无限滚动从不同条件获得的不同内容 我使用PASGRESV7.5,后继3.30.4和KOA.JS 2.3.0;我所经历的情况与instagram home feed类似,在instagram home feed中,帖子来自您关注的用户以及您关注的标签,sequelize.js,infinite-scroll,koa,postgresql-9.5,Sequelize.js,Infinite Scroll,Koa,Postgresql 9.5,我可以使用OR条件在一个查询中获取所有内容,例如: SELECT DISNTICNT(ID), title, description FROM posts WHERE creatorID in (1,2,3...) OR hashtags IN ('{sport}','{technology}'...) ORDER BY "createdAt" DESC LIMIT 10, OFFSET 0; 但是很明显,从这个查询中,我不知道帖子是来自creatorID,在这个例子中,creator

我可以使用OR条件在一个查询中获取所有内容,例如:

SELECT DISNTICNT(ID), title, description 
FROM posts 
WHERE creatorID in (1,2,3...) OR hashtags IN ('{sport}','{technology}'...) 
ORDER BY "createdAt" DESC 
LIMIT 10, OFFSET 0;

但是很明显,从这个查询中,我不知道帖子是来自creatorID,在这个例子中,creatorID是我正在关注的用户的ID,还是来自我正在关注的hashtags。我在想,是否有一种方法可以向查询中添加一个变量或自定义列来识别源,否则我必须进行两次查询,并计算限制和偏移量,这不是我想要做的,或者sequelize可以选择将此查询合并为一个查询并添加一列以进行区分。

解决方案是根据条件将两个选择合并,并通过Hashtag和follow将额外的列添加到true或false,这样当您循环浏览帖子时,您就知道它来自何处了。:

SELECT * FROM (
    SELECT posts.*, 'false' as byHashtag, 'true' as byFollowing 
    FROM "follows"
    LEFT OUTER JOIN posts ON "posts"."creatorId" = "followings"."followerId"
    WHERE "followings"."userId" = 1
    GROUP BY "posts"."id"
    UNION
    SELECT posts.* , 'true' as byHashtag, 'false' as byFollowing 
    FROM "follow_hashtags"
    LEFT OUTER JOIN posts ON "posts"."tags" && array(SELECT hashtag::text FROM "followedHashtags" WHERE "followerId" =1)
    GROUP BY "posts"."id"
) posts 
ORDER BY "createdAt" DESC
LIMIT 10 OFFSET 0

distinct
不是一个函数。它始终适用于“选择”列表中的所有列。用括号括住其中一列不会改变任何东西,也没有用
distinct(a),b
distinct a,(b)
distinct a,b
-在您的情况下,如果
ID
是主键,
distinct
将不会同时删除任何内容all@a_horse_with_no_name请注意,我并没有使用distinct这个词作为查询函数,而是使用distinct where COMETHE post,但是您在查询中使用的是
distinct
,就好像它是一个function@a_horse_with_no_name是的,因为我必须消除重复,同一篇文章可能来自一个追随者和一个后续标签,如果追随者发布一篇文章,其中有一个我正在跟踪的标签,如果我的逻辑是错误的,请纠正我。正如我所说:在主键列周围加括号不会改变任何事情<代码>不同始终应用于选择列表中的所有列。如果其中包含PK列,根据定义,不会显示重复项(并且
distinct
不会删除任何内容)