php - 我如何修改此 MySQL 查询来查找排名?

标签 php mysql sql rank

我正在用 PHP 开发一个联赛应用程序。当我访问天梯 View 页面时,我有一个查询,该查询从该天梯中选择所有小队并按他们的经验(league_experience)对它们进行排序。我想修改查询,以便它找到当前小队的排名。

$query_squads = "
            SELECT
                s.squad_id AS squad_id, s.ladder_id, s.team_id AS team_id,
                x.experience_id, x.squad_id, SUM(x.value) as total_exp
            FROM league_squads AS s
            LEFT JOIN league_experience AS x ON (s.squad_id = x.squad_id)
            WHERE s.ladder_id = ".$ladder_id."
            GROUP BY s.squad_id, s.ladder_id, s.team_id, x.experience_id, x.squad_id
            ORDER BY total_exp DESC
            ";

这是我的表格

--
-- Table structure for table `league_experience`
--

CREATE TABLE IF NOT EXISTS `league_experience` (
  `experience_id` int(15) NOT NULL,
  `squad_id` int(15) NOT NULL,
  `value` int(15) NOT NULL,
  `date_earned` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `description` varchar(255) NOT NULL,
  PRIMARY KEY (`experience_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `league_experience`
--

INSERT INTO `league_experience` (`experience_id`, `squad_id`, `value`, `date_earned`, `description`) VALUES
(1, 1, 500, '2013-09-03 07:10:59', 'For being ballers.'),
(2, 2, 250, '2013-09-03 07:10:52', 'For being awesome.');

-- --------------------------------------------------------

--
-- Table structure for table `league_squads`
--

CREATE TABLE IF NOT EXISTS `league_squads` (
  `squad_id` int(15) NOT NULL AUTO_INCREMENT,
  `team_id` int(15) NOT NULL,
  `ladder_id` int(15) NOT NULL,
  `date_joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` tinyint(1) NOT NULL,
  `last_rank` tinyint(5) NOT NULL,
  PRIMARY KEY (`squad_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `league_squads`
--

INSERT INTO `league_squads` (`squad_id`, `team_id`, `ladder_id`, `date_joined`, `status`, `last_rank`) VALUES
(1, 1, 1, '2013-09-03 08:16:27', 0, 1),
(2, 2, 1, '2013-09-03 08:16:25', 0, 2);

最佳答案

SELECT
                s.squad_id AS squad_id, s.ladder_id, s.team_id AS team_id,
                x.experience_id, x.squad_id, SUM(x.value) as total_exp,
                @i:=@i+1 AS rank
            FROM league_squads AS s
            LEFT JOIN league_experience AS x ON (s.squad_id = x.squad_id),
            (SELECT @i:=0) AS foo
            WHERE s.ladder_id = 1
            GROUP BY s.squad_id, s.ladder_id, s.team_id, x.experience_id, x.squad_id
            ORDER BY total_exp DESC

<强> sample fiddle

关于php - 我如何修改此 MySQL 查询来查找排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18587626/

相关文章:

c# - SQL 查询抛出错误 C#

sql - 动态 SQL 存储过程中的单引号处理

java - 如何在使用 hibernate 作为 ORM 时执行基于语言环境的排序

php - SQL 查询不会连接我的结果

php - 显示在底部的查询中的子查询结果

mysql - 可用的预约

mysql - 在 MySQL 数据库上使用版本控制 (Git)

php - Shopware - 将 $sUserLoggedIn-Variable 传递给 Widget

php - 检查目录路径是否以 DIRECTORY_SEPARATOR 结尾

php - 如何为数据库对象分配唯一 ID