我正在撰写一个让我了解所有用户的查询。每个用户都可以拥有一张图片,每个用户都可以喜欢该图片一次。
共有3个表格: 用户 图片 像
所以我需要所有用户数据与他们的图片相同的数量,我想在1个查询中得到它。我使用右连接来获得没有图片的用户和没有喜欢的用户的左连接。现在我有除了喜欢之外我需要的所有信息。当我算上时,即使没有喜欢,我也总是得到1分。是否有可能在1个查询中,因为我还需要按喜欢订购?
这是我的查询。
SELECT u.uid,
firstname,
lastname,
email,
zipcode,
city,
street,
Count(*) AS likes
FROM picture p
RIGHT JOIN USER u using(pid)
JOIN like using(uid)
GROUP BY uid,
firstname,
lastname,
email,
zipcode,
city,
street;
编辑:
此查询正确无误:
SELECT u.uid, firstname, lastname, email, zipcode, city, street, count(L.PID) as likes
FROM User u
LEFT JOIN Like L USING(PID)
GROUP BY uid,firstname,lastname,email,zipcode,city,street;
答案 0 :(得分:0)
从Like表中计算一些东西,例如:
SELECT u.uid, firstname,lastname,email,zipcode,city,street
, count(L.UID) as likes
FROM Picture p
RIGHT JOIN User u
using(PID)
LEFT JOIN Like L
USING(UID)
GROUP BY uid,firstname,lastname,email,zipcode,city,street;
答案 1 :(得分:0)
表结构会很好,因为看起来你的like
加入可能会出现问题。乍一看,您似乎实际上在计算用户喜欢的次数"图片而不是他的图片被喜欢的次数。在任何情况下,假设它必须是喜欢某事物的用户是合理的,因此like
表中的用户ID指的是那些喜欢的人,而不是&# 39;被人喜欢。
我在此假设like
是一个包含外键User.uid
和Picture.pid
的联接表。如果不是这种情况,请将问题编辑得更清楚,我会相应地改变。
如果您尝试获取所有用户(以及有关他们的其他信息),那么如果您从此开始,您会更清楚自己要做什么,所以最好如果FROM
子句是User u
并且从那里开始工作:
SELECT
u.uid,
firstname,
lastname,
email,
zipcode,
city,
street,
Count(*) AS 'likes'
FROM User u
LEFT JOIN Like l ON u.pid = l.pid
GROUP BY
u.uid,
firstname,
lastname,
email,
zipcode,
city,
street