1

我想根据查询中的列的总和获得结果。我有两张桌子:league_squads 和league_experience。我想选择有经验的小队结果。

下面的查询获取梯子上的所有小队,并按他们的总经验降序排列。我想对其进行修改,使其仅获得真正有经验的小队。

$query_squads = "
            SELECT
                s.squad_id AS 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."
            ORDER BY total_exp DESC
            ";

如果我使用下面的查询,我会收到一条错误消息,指出“total_exp”列不存在。

$query_squads = "
            SELECT
                s.squad_id AS 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."
                 AND total_exp > 0
            ORDER BY total_exp DESC
            ";

这是我的表:

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;

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

--
-- 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;
4

2 回答 2

2

您必须进行这样的查询

SELECT s.squad_id AS 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."
HAVING SUM(x.value) > 0
ORDER BY total_exp DESC
于 2013-09-03T07:09:15.153 回答
1
SELECT s.squad_id AS 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."
HAVING total_exp > 0
 ORDER BY total_exp DESC
于 2013-09-03T07:10:25.283 回答