按所有用户的相互喜欢/不喜欢的总和排序,由喜欢或不喜欢分开

时间:2017-01-04 09:09:34

标签: mysql

我希望所有用户对页面喜欢/不喜欢排序同一页面喜欢/不喜欢,并按最喜欢/不喜欢的方式订购。< / p>

我尝试加入同一个表本身,但我不知道如何在不改变COUNT条件的情况下同时分离我喜欢和不喜欢的WHERE

假设我的uid(用户ID)为544 ,我有这样的疑问:

SELECT l1.id, l1.uid, l1.item_id, l1.status, l2.id, l2.uid, l2.item_id, l2.status, 
  COUNT(*) AS common_likes,
  COUNT(*) AS common_dislikes // should check for status = 0
FROM pages_likes AS l1
JOIN pages_likes AS l2 ON l1.item_id = l2.item_id
WHERE l1.uid != 544 AND l2.uid = 544
GROUP BY l1.uid
ORDER BY common_likes DESC, l1.uid DESC
LIMIT 10

实际上这个查询通常会提供错误的结果,因为我可以检查单个用户页面是否有常见的喜欢/不喜欢,并且计数与我从{{ {1}}。例如,我有common_likes并查看所有常见的喜欢/不喜欢我正在使用www.domain.com/user/123/来检查特定用户ID的常见喜欢/不喜欢。但现在我需要概述所有用户(uid IN (123,544)),因此它应该是一个不同的查询。

所以我发布的查询是我想出来的,需要改进。

表格结构:

www.domain.com/users/page_likesiduiditem_idstatus

date表示用户ID。

uid就像是。

status = 1表示不喜欢。

查询输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试将import sympy import mpmath import numpy as np import math Sa = 200 Sm = 100 mu1 = 310 sigma1 = 15 mu2 = 95 sigma2 = 5 f = 0.9 u1, u2 = sympy.symbols('u1 u2', real=True) Snf = Sa/(1-Sm/(sigma1*u1 + mu1)) a = ((f*(sigma1*u1 + mu1))**2)/(sigma2*u2 + mu2) b = (-1/3)*sympy.log(f*(sigma1*u1 + mu1)/(sigma2*u2 + mu2),10) fu1 = sympy.diff((Snf/a)**(1/b),u1).subs({u1:8.11656443, u2:13.4526774}) print(fu1) fu2 = sympy.diff((Snf/a)**(1/b),u2).subs({u1:8.11656443, u2:13.4526774}) print(fu2) SUM语句一起使用,而不是case,如下所示

count

此外,您的方案中不需要SELECT l1.id, l1.uid, l1.item_id, l1.status, SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS common_likes, SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS common_dislikes FROM pages_likes AS l1 WHERE l1.uid = 544 GROUP BY l1.uid ORDER BY common_likes DESC, l1.uid DESC LIMIT 10;

希望这会帮助你。