我希望所有用户对页面喜欢/不喜欢排序同一页面喜欢/不喜欢,并按最喜欢/不喜欢的方式订购。< / 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_likes
,id
,uid
,item_id
,status
date
表示用户ID。
uid
就像是。
status = 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;
。
希望这会帮助你。