Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要有关SQL语句的帮助吗_Php_Sql - Fatal编程技术网

Php 需要有关SQL语句的帮助吗

Php 需要有关SQL语句的帮助吗,php,sql,Php,Sql,我正在尝试从我的用户表中获取一个具有最多引用的用户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, `reg

我正在尝试从我的用户表中获取一个具有最多引用的用户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
我正在尝试查找在所有用户表中具有最多相同引用的用户id。假设用户4在引用varchar中有10个具有相同内容的不同用户。我如何选择“查看用户4”,而不必检查每个用户,记录他们的推荐,然后选择一个推荐最多的用户

必须有一个更简单的方法

感谢您的帮助。谢谢


编辑:抱歉,引用是另一个用户的
名称
,而不是添加到SQL中的
用户id

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

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

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

似乎是因为其他用户没有推荐,所以它也在计算推荐数量,并返回一个空白的顶级推荐

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

谢谢你的帮助

那么,这里的referral是另一个用户的用户id?不,对不起,referral是另一个用户的
name
的varchar。我没有想到当我制作原始表格时(已经晚了),我应该按用户的id去做。事实上,我应该创建一个完整的新表,只用于转介,并将其加入到用户表中。。。但是现在我被卡住了,因为这个网站是实时的,并且已经有10000个用户使用这个设置。但是,这可能会给你的未来发展带来问题。此处的for name不是唯一的实体。此外,如果您的系统上有“编辑配置文件”,在这种情况下,编辑名称将导致您丢失引用。用户无法更改其名称,他们在注册时被锁定。通常我会为这样的东西做一个新的表格,我一直在努力完成这个项目。现在它在咬我的屁股!顶部查询为所有转介返回1,底部查询为user_id 1 count 1。在这种情况下,您能给我一个表转储或类似的东西吗?还是多排?它在我的类似表中对我有效。因此,这里每个用户只有一个推荐,因此您无法获得推荐最多的用户id,因为将始终存在“1”。所以我不确定你想要实现什么。您想获得最多存在的推荐吗?其他情况下,您需要创建一个userandferral表来保存用户推荐关系。是的,我希望获得推荐显示最多的内容。当我进行站点升级时,我将修复此问题,并编写一些脚本将所有内容移到新设置中。。但现在我需要一种方法来获取存在的东西,最短的us素数变为空白[num_of_refferals:1595]。