[英]How to use LIKE for mysql search with JOIN and ORDER BY the count of most rows/votes in the vote table?
[英]How to join a SQL table while doing a count for the most rows?
因此,我有一个“书签”表,我试图为该表获取具有最多书签内容的用户的“ UserID”。 该查询返回十个最活跃用户的UserID。 这个查询对我来说看起来像这样,并且可以工作:
SELECT COUNT(*) AS `Rows`, UserID FROM `bookmark`
WHERE UserID NOT IN(1, 2, 25, 38, 41, 43, 47, 125)
GROUP BY UserID ORDER BY `Rows` DESC LIMIT 10
现在,我尝试将结果查询加入“帐户”表,以通过将用户ID与帐户表中的“ id”进行比较来获取每个用户ID的所有信息。
SELECT COUNT(*) AS `Rows`, UserID FROM `bookmark`
join accounts ON accounts.ID = bookmark.UserID
WHERE UserID NOT IN(1, 2, 25, 38, 41, 43, 47, 125)
GROUP BY UserID ORDER BY `Rows` DESC LIMIT 10
这不返回任何行作为accounts表,而是返回与之前相同的结果。 我需要能够获取帐户表的所有行(与使用*相同)
如果有帮助,我的帐户表中的这些行=用户名,ID,电子邮件,而我的书签表中的这些行= ID,用户ID,链接
一种解决方案是将group by
移动到子查询:
select *
from (
select count(*) as Rows
, UserID
from bookmark
where UserID not in (1, 2, 25, 38, 41, 43, 47, 125)
group by
UserID
) as BookmarkSubquery
join accounts
on accounts.ID = BookmarkSubquery.UserID
order by
BookmarkSubquery.Rows DESC
limit 10
另一个方法是通过以下方式将帐户中的列添加到组中:
select count(*) as Rows
, bookmark.UserID
, accounts.Name
, accounts.BirthDate
from bookmark
join accounts
on accounts.ID = BookmarkSubquery.UserID
where bookmark.UserID not in (1, 2, 25, 38, 41, 43, 47, 125)
group by
, bookmark.UserID
, accounts.Name
, accounts.BirthDate
order by
count(*) DESC
limit 10
注意:MySQL允许您仅列出group by
bookmark.UserID
。 尽管可以,但是不建议这样做。
这可能很难看,但是您可以将第一个查询存储在临时表中,然后在帐户和临时表之间进行联接。
另外,尝试进行左联接以查看是否有这种方式。 有时,这有助于调试查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.