需要一些SQL语句的帮助

时间:2012-06-04 06:41:59

标签: php sql

我正在尝试从拥有最多推介的用户表中获取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有10个不同的用户在引用varchar中具有相同的东西。如何选择查看用户4而不通过每个用户,记录他们的推荐,然后选择最多的用户。

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

感谢任何帮助。谢谢!

编辑:抱歉,推介是另一位用户的name,而不是user_id

3 个答案:

答案 0 :(得分:2)

在SQL中添加了一点:

SELECT referral, count(*) AS count FROM users 
WHERE referral IS NOT NULL AND referral != ''
GROUP BY referral ORDER BY COUNT(referral) DESC

答案 1 :(得分: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

答案 2 :(得分: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

感谢您的帮助!

相关问题