【问题标题】:Exclude liked and disliked pages in a SQL query?在 SQL 查询中排除喜欢和不喜欢的页面?
【发布时间】:2016-07-27 14:25:53
【问题描述】:

我正在用这些表格中的好恶来保存兴趣:pagespages_likespages_dislikes

现在我想要一个主页来显示一个随机页面,但只显示那些未被特定用户喜欢或不喜欢的页面。

到目前为止,我有这个 SQL 语句:

SELECT
   p.id AS page_id, d.uid AS duid, l.uid AS luid,p.title FROM OneNight_pages p

  LEFT JOIN OneNight_pages_dislikes d on d.page_id = p.id
  LEFT JOIN OneNight_pages_likes l on l.page_id = p.id
  WHERE 
  l.uid != 1 AND d.uid != 1
  GROUP BY page_id

ORDER BY rand() LIMIT 10

我首先在没有AND d.uid != 1 的情况下对此进行了测试,并得到了正确的结果。但是在添加了这个 AND 条件后,我得到了错误的结果。他只会选择一个被喜欢和不喜欢的页面,而不是像我想要的那样过滤掉这个特定的用户 ID。

我怎样才能实现只排除喜欢和不喜欢的特定用户 ID?我想需要一个子查询或其他东西吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您没有提供表结构,也没有提供数据样本,也没有提供预期结果,所以说实话,您的问题不是很清楚。

    这就是你想要的:

    SELECT p.id AS page_id, p.title
    FROM OneNight_pages p
    LEFT JOIN OneNight_pages_dislikes d ON (d.page_id = p.id AND d.uid = 1)
    LEFT JOIN OneNight_pages_likes l ON (l.page_id = p.id AND l.uid = 1)
    WHERE l.uid IS NULL AND d.uid IS NULL
    GROUP BY page_id
    ORDER BY rand()
    LIMIT 10
    

    如果这确实是您想要的,并且如果一个用户只能喜欢或不喜欢每个页面一次(即,如果您的主键是 (page_id, uid)),那么 GROUP BY 可能是不必要的。

    另外作为一个附注,除非您的用户可以同时喜欢和不喜欢一个页面,否则只有一个表 likes 带有一个指示是否它是喜欢还是不喜欢(例如,“1”代表喜欢,“-1”代表不喜欢)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      相关资源
      最近更新 更多