1

我正在尝试从具有最多推荐的用户表中获取 user_id。抱歉标题含糊不清,我不确定这叫什么。

使用 PHP 和 MYSQL。

例子:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(180) CHARACTER SET utf8 NOT NULL,
  `ip` varchar(180) CHARACTER SET utf8 NOT NULL,
  `registered` varchar(180) CHARACTER SET utf8 NOT NULL,
  `lastonline` varchar(180) CHARACTER SET utf8 NOT NULL,
  `referral` varchar(180) CHARACTER SET utf8 NOT NULL,
  `url` varchar(180) CHARACTER SET utf8 NOT NULL,
  `points` float NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6544 ;

用户看起来像这样,

1, 'username', 'ipaddy', 'date', 'date', '**REFERRAL**', 'url', 13633

我试图找到在所有用户表中具有最多相同推荐的 user_id。假设用户 4 在引用 varchar 中有 10 个具有相同内容的不同用户。我如何选择查看用户 4 而无需遍历每个用户,记录他们的推荐,然后选择最多的用户。

必须有一个更简单的方法......

任何帮助表示赞赏。谢谢!

编辑:对不起,推荐是name另一个用户的,而不是user_id.

4

3 回答 3

2

为您的 SQL 添加了一些额外的内容:

SELECT referral, count(*) AS count FROM users 
WHERE referral IS NOT NULL AND referral != ''
GROUP BY referral ORDER BY COUNT(referral) DESC
于 2012-06-04T06:47:50.407 回答
1

试试这个,这对你有用。但请尝试考虑我上面的建议。但是现在,使用这个。

SELECT 
    ref.prime,
    ref.num_of_refferals
FROM
(
    SELECT 
        referral AS prime,
        COUNT(*) AS num_of_refferals,
        NAME
    FROM
        users
        WHERE
                referral != ''
    GROUP BY
        referral
) AS ref
ORDER BY 
    ref.num_of_refferals
DESC
LIMIT 1
于 2012-06-04T07:36:36.523 回答
0

似乎因为其他用户没有推荐,所以它也在计算它们并为顶级推荐返回空白。

Papaiatis 提供了以下内容

SELECT referral FROM users GROUP BY referral ORDER BY COUNT(referral) DESC LIMIT 1

我确保推荐字段不为空,我想获取用户的推荐数量。

SELECT referral, count(*) as count FROM users WHERE referral != '' GROUP BY referral ORDER BY COUNT(referral) DESC

谢谢您的帮助!

于 2012-06-04T07:47:47.327 回答