使用php和joomla 2.5检索百分位排名
我一直在尝试根据分数获得用户的百分位排名。我可以在phpmyadmin中获得结果,但似乎无法在php中获得正确的代码 这是我到目前为止所拥有的使用php和joomla 2.5检索百分位排名,php,mysql,joomla,rank,percentile,Php,Mysql,Joomla,Rank,Percentile,我一直在尝试根据分数获得用户的百分位排名。我可以在phpmyadmin中获得结果,但似乎无法在php中获得正确的代码 这是我到目前为止所拥有的 $db=JFactory::getDBO(); $session =& JFactory::getSession(); $user =& JFactory::getUser(); $userId = $user->id; $rank = "SELECT rank, cb_cscore,(SELECT 100*(rank / cou
$db=JFactory::getDBO();
$session =& JFactory::getSession();
$user =& JFactory::getUser();
$userId = $user->id;
$rank = "SELECT rank, cb_cscore,(SELECT 100*(rank / count(*)) FROM `e72jm_comprofiler`,(SELECT @rownum :=0)r WHERE cb_cscore IS NOT NULL) as percentage FROM (SELECT @rownum := @rownum +1 AS rank, `cb_cscore` , `user_id` FROM `e72jm_comprofiler`,(SELECT @row :=0) r WHERE cb_cscore IS NOT NULL AND user_id = $userId LIMIT 0,1";
$db->setQuery( $rank );
$db->query();
但是-我一直被困在如何加载结果上
意味着如何从查询中加载结果
任何帮助都将不胜感激
$rank = "SELECT rank, cb_cscore,(SELECT 100*(rank / count(*)) as percentile FROM `e72jm_comprofiler`,(SELECT @rownum :=0)r WHERE cb_cscore IS NOT NULL) as percentage FROM (SELECT @rownum := @rownum +1 AS rank, `cb_cscore` , `user_id` FROM `e72jm_comprofiler`,(SELECT @row :=0) r WHERE cb_cscore IS NOT NULL AND user_id = $userId LIMIT 0,1";
然后像其他任何列一样以百分比列的形式访问它。首先,在查询中没有正确定义数据库表。您需要使用前缀uuu,因此在您的情况下,它将是uu comprofiler而不是e72jm_comprofiler 其次,您不需要使用&运算符,因此将=&JFactory更改为=JFactory 第三,删除$db->query;在将数据插入数据库或更新数据库时使用 然后需要使用$rows=$db->loadObjectList定义结果 最后,您可以使用foreach循环显示结果,因为它将是一个数组 最终代码: 我还建议您在数据库查询中使用Joomla 2.5编码标准: 希望这有帮助试试这个
$db=JFactory::getDBO();
$session =& JFactory::getSession();
$user =& JFactory::getUser();
$userId = $user->id;
$rank = "SELECT rank, cb_cscore,
(SELECT 100*(rank / count(*)) FROM `e72jm_comprofiler`,
(SELECT @rownum :=0)r WHERE cb_cscore IS NOT NULL) as percentage
FROM (SELECT @rownum := @rownum +1 AS rank, `cb_cscore` , `user_id` FROM `e72jm_comprofiler`,
(SELECT @row :=0) r WHERE cb_cscore IS NOT NULL)
AND user_id = $userId LIMIT 0,1";
$db->setQuery( $rank );
$db->query();
$res = $db->loadAssocList();//if the result is single row you can use $db->loadAssoc();
echo "<pre/>";
print_r($res);
我尝试了loadAssocList和LoadAssoc,但仍然无法加载。关于获取用户排名然后等待单独计算百分比的简单方法的建议?只需回显查询并将其粘贴到phpmyadmin并检查查询中的任何错误。请让我知道phpmyadmin中的状态-这是最有效的设置@rownum:=0;选择rank,cb_Ccore,从e72jm_comprofiler中选择100*rank/count*,其中cb_Ccore>0作为rank,cb_Ccore,选择@rownum:=@rownum+1作为rank,e72jm_comprofiler中的用户id,其中cb_Ccore>0,由cb_Ccore DESC订购,结果用户id=42限制1,但无法在php端找出第一个选择,详细检查您的查询时发现缺少一个,请检查
$db=JFactory::getDBO();
$session =& JFactory::getSession();
$user =& JFactory::getUser();
$userId = $user->id;
$rank = "SELECT rank, cb_cscore,
(SELECT 100*(rank / count(*)) FROM `e72jm_comprofiler`,
(SELECT @rownum :=0)r WHERE cb_cscore IS NOT NULL) as percentage
FROM (SELECT @rownum := @rownum +1 AS rank, `cb_cscore` , `user_id` FROM `e72jm_comprofiler`,
(SELECT @row :=0) r WHERE cb_cscore IS NOT NULL)
AND user_id = $userId LIMIT 0,1";
$db->setQuery( $rank );
$db->query();
$res = $db->loadAssocList();//if the result is single row you can use $db->loadAssoc();
echo "<pre/>";
print_r($res);