LEFT JOIN
(
SELECT user_id, review, COUNT(user_id) totalCount
FROM reviews
GROUP BY user_id
) b ON b.user_id= b.user_id 我试着把WHERE LENGTH(review) > 100装在这个地方,但是每次我把它放进去,都会给我带来问题。
上面的子查询包括了user_id的所有评论。我只想再加一个条件。只有大于100长度的计数检查。
顺便提一句,我已经看到了函数CHAR_LENGTH --不确定我是否也需要它。
编辑:
以下是完全符合我的需求的完整查询:
static public $top_users = "
SELECT u.username, u.score,
(COALESCE(a.totalCount, 0) * 4) +
(COALESCE(b.totalCount, 0) * 5) +
(COALESCE(c.totalCount, 0) * 1) +
(COALESCE(d.totalCount, 0) * 2) +
(COALESCE(u.friend_points, 0)) AS totalScore
FROM users u
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM items
GROUP BY user_id
) a ON a.user_id= u.user_id
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM reviews
GROUP BY user_id
) b ON b.user_id= u.user_id
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM ratings
GROUP BY user_id
) c ON c.user_id = u.user_id
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM comments
GROUP BY user_id
) d ON d.user_id = u.user_id
ORDER BY totalScore DESC LIMIT 25;";发布于 2013-02-22 20:42:09
LENGTH()返回以字节为单位的字符串长度。您可能需要CHAR_LENGTH(),因为它会给出实际的字符。
SELECT user_id, review, COUNT(user_id) totalCount
FROM reviews
WHERE CHAR_LENGTH(review) > 100
GROUP BY user_id, review您也没有正确地使用GROUP BY。
见文件
发布于 2013-02-22 21:29:26
您想要的查询是:
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount,
sum(case when length(review) > 100 then 1 else 0 end
) as NumLongReviews
FROM reviews
GROUP BY user_id
) b ON b.user_id= b.user_id 这既包括评论,也包括“长”评论。这个计数是使用嵌套在case函数中的一个sum()语句完成的。
https://stackoverflow.com/questions/15032814
复制相似问题