我有一个名为users
的表格,如下所示:
-id
-email
-Login
-admin
-coins
- 货币
-premium
-IP
-pass
-REF
-signup
-online
- 促进
-activate
-banned
-rec_hash
- 国家
-c_changes
-sex
-daily_bonus
如果说id为81的用户推荐10个人,那么这10个人的ref
列中会有“81”。
我想创建一个前5个推荐表,但我遇到查询问题并在PHP中显示,是否有人能够提供帮助?
如果他们没有任何转介,我会忘记提醒0
我如何排除0作为转介?
答案 0 :(得分:2)
您可以在单个SQL语句中执行此操作:
SELECT ref, COUNT(*) AS num FROM users
GROUP BY ref ORDER BY num DESC LIMIT 5
但是这只会获得5个ID,而不是用户行。然后,您可以执行进一步的查询以获取实际行。或者,将上述查询与联接一起使用,将其全部合并到一起。
答案 1 :(得分:0)
凌乱的设计 - 这应该是空的。无论...如果他们没有推荐它显示为0
SELECT u.login, ilv.referred
FROM
(SELECT ref, COUNT(*) AS referred
FROM users
WHERE ref IS NOT NULL
AND ref>0
GROUP BY ref
ORDER BY COUNT(*) DESC
LIMIT 0,5) ilv
INNER JOIN users u
ON ilv.ref=users.id
ORDER BY ilv.referred DESC;
答案 2 :(得分:0)
或者像这样的SQL:
SELECT u.*, COUNT(*) as referrers FROM users r JOIN users u ON r.ref = u.id
GROUP BY u.id ORDER BY referrers DESC LIMIT 5
即使在同一个表上使用连接,也只使用一个语句会更快。