使用php和joomla 2.5检索百分位排名

使用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

我一直在尝试根据分数获得用户的百分位排名。我可以在phpmyadmin中获得结果,但似乎无法在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();
但是-我一直被困在如何加载结果上

意味着如何从查询中加载结果

任何帮助都将不胜感激

$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);