【问题标题】:Show entries that I have in common with an user, seperated by likes and dislikes显示我与引座员共同的条目,以喜欢和不喜欢分隔
【发布时间】:2016-11-12 13:14:27
【问题描述】:

我有一个页面系统,就像 facebook 上的那样,每个用户都可以喜欢甚至不喜欢一个页面。 status = 1 是喜欢,0 是不喜欢。

这是我的查询:

SELECT  
p.title_de, de, p.keyname, l.status,
(CASE WHEN l.status = '1' THEN title_de END) AS liked,
(CASE WHEN l.status = '0' THEN title_de END) AS disliked
FROM pages_likes l  
JOIN pages p on p.id = l.page_id 
WHERE  p.keyname != 'rship'  AND l.uid = '311'  
GROUP BY l.page_id  
ORDER BY p.title_de ASC

问题:

1) 我还想统计该用户所有喜欢和不喜欢的条目。目前我为此编写了一个额外的查询,但我想知道在该查询中实现该计数是否会更有效?我尝试使用COUNT,但我只从整个查询中得到一个结果。

2) 我想显示我对这个用户的共同/共同点赞(uid 表示 user_id)。我尝试将AND 'uid' = 1 添加到WHERE,但这没有用。这也应该由喜欢和不喜欢(status = 10)分开。我想我应该用UNION 写一个子查询?但我不知道具体是怎样的。

这是我的结构:

【问题讨论】:

  • 你没有聚合函数。那么,为什么要使用 GROUP BY 子句?并查看meta.stackoverflow.com/questions/333952/…
  • 为了避免重复的页面条目,我输出为页面标题。
  • sum(l.status) as liked, count(l.status)-sum(l.status) as disliked
  • 应该怎么做?我主要想计算我与特定用户的相互喜欢/不喜欢。
  • 什么是title_de

标签: mysql sql performance


【解决方案1】:

将这些情况改为

SUM(l.status = 1) AS likes,
SUM(l.status = 0) AS dislikes,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多