关于如何计算和排名,我已经查看了各种SO问题。我的数据库中有一个名为vDestination的字段,我想得到每个目的地的计数和排名。我正在使用Codeigniter。我有以下内容:
$sql = ("SET @curRank := 0;\r\n
SELECT vDestination, COUNT(*) AS count, @curRank := @curRank + 1 AS rank FROM tbl_user_trip ORDER BY vDestination");
这看起来像有效的SQL语法,但我不断收到数据库错误。有人请指出这个查询有什么问题吗?
发生数据库错误 错误号码:1064
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第3行使用“SELECT vDestination,COUNT(*)AS count,@curRank:= @curRank + 1 AS rank FROM tb”附近使用正确的语法
SET @curRank := 0; SELECT vDestination, COUNT(*) AS count, @curRank := @curRank + 1 AS rank FROM tbl_user_trip ORDER BY vDestination
这是我得到的错误。
试试这样:
$this->db->query("SET @curRank := 0");
$this->db->query("SELECT vDestination, COUNT(*) AS count, @curRank := @curRank + 1 AS rank FROM tbl_user_trip ORDER BY vDestination");
工作方案如下:
function getMostPopularDestinations()
{
$this->db->query("SET @curRank := 0");
$query = $this->db->query("SELECT vDestination, COUNT(*) AS count, @curRank := @curRank + 1 AS rank FROM tbl_user_trip GROUP BY vDestination ORDER BY vDestination");
return $query->result_array();
}
所以@tyro建议,但也有GROUP BY。