2011-12-29 106 views
-6

我有兩個功能,我想使它像一個。加入查詢

功能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)); 
     } 
+0

請提供更多的細節 - 什麼是表的結構,它們是如何聯繫?你能告訴我們你試過什麼嗎? (以及$ this-> provider?);不知何故,這些查詢看起來完全是分開的(一個返回一行,其他幾個) - 您的目標是什麼?爲什麼要將它們結合起來? – codeling

+0

[我在這裏回答過類似的問題,希望它可以幫助你理解(http://stackoverflow.com/a/8548280/337055)如果不是讓我知道和虐待嘗試幫忙。 – Philip

+0

沒有道理給我yet.not在經歷這就是爲什麼我需要幫助:) – Dzoki

回答

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 JOINLEFT JOIN,但它可能會在MySQL會影響性能。

+0

作品,感謝正常,短而明確的答案。多數民衆贊成我喜歡它,再次感謝。 – Dzoki