加入查询

时间:2011-12-29 06:47:14

标签: php mysql sql

我有两个功能,我想让它像一个。

功能1

public function getAlliancesList($pageIndex, $pageSize)
{
    return $this->provider->fetchResultSet("SELECT  a.id, a.name, a.player_count, a.rating    FROM p_alliances a    ORDER BY a.rating DESC, a.player_count DESC, a.id ASC    LIMIT %s,%s", array($pageIndex * $pageSize, $pageSize));
} 

功能2

public function getAllianceAverage($allianceId)
{
    $row = $this->provider->fetchRow("SELECT AVG(p.total_people_count) as average FROM p_players p WHERE p.alliance_id = '%s'", array($allianceId));
    return intval($row['average']);
} 

基本上我想将函数2加入到函数1中,所以我不需要2个查询,然后我可以在模板文件上调用那个函数,如$this->datalist->row['average'],如果可能的话。

我已经尝试了很多方法让两个查询一起工作,但无济于事,所以任何帮助都会很棒。

编辑:

我想要的是在getAllianceList函数

中包含联盟ID

这是我们到现在为止的尝试:

public function getAlliancesList($pageIndex, $pageSize)
        {
            return $this->provider->fetchResultSet("SELECT *
FROM `p_alliances`
JOIN `p_players` 
ON `p_players`.`id` = `p_alliances`.`id`  LIMIT %s,%s", array($pageIndex * $pageSize, $pageSize));
        }

1 个答案:

答案 0 :(得分:2)

SELECT
    a.id,
    a.name,
    a.player_count,
    a.rating,
    AVG(p.total_people_count) AS `average`
FROM p_alliances a
    INNER JOIN p_players p ON (p.alliance_id = a.id)
GROUP BY a.id
ORDER BY a.rating DESC, a.player_count DESC, a.id ASC
LIMIT %s,%s

如果可能有0个玩家,您可能希望将INNER JOIN更改为LEFT JOIN,但这可能会影响mysql的性能。