2014-02-21 60 views
0

我想爲Codeigniter中的兩個團隊創建一個夾具。我的數據庫是在MySQL Workbench中構建的。我有一張球隊桌Codeigniter JOIN使用兩個表 - 需要來自兩個數據

team 

team_id 
team_name 
team_logo 

我也有一個表夾具。

fixture 

fixture_id 
fixture_text 
fixture_comp 
fixture_type 
fixture_level 
fixture_date 

這兩個表之間的關係是多對多它創建一個連接表稱爲team_has_fixture具有複合PK從TEAM_ID由和fixture_id

team_has_fixture 

team_id 
fixture_id 

我想創建一個燈具,其使用夾具表中的所有數據和團隊表中夾具中涉及的兩個團隊的團隊徽標。夾具

e.g佈局看起來就像這樣 - 團隊1標誌 - 夾具的細節 - 2隊徽

我想在一個單一的查詢來實現這一點,但不知道怎麼辦。

我可以得到所有來自兩個表的信息單獨沒有問題。我也可以使用我的模型中的以下代碼從JOIN表team_has_fixtures中獲取燈具數據;

燈具模型

function fixtures() 

    { 

     //Query the team_has_fixture table for every record and row 

     $results = array(); 

     $this->db->select('*'); 
     $this->db->from('team_has_fixture'); 

     $this->db->join('team', 'team_has_fixture.team_team_id = team.team_id'); 
     $this->db->join('fixture', 'team_has_fixture.fixture_fixture_id= fixture.fixture_id'); 

     $query = $this->db->get(); 

     if($query->num_rows() > 0) 
     { 
     $results = $query->result(); 
     } 

     return $results; 

    } 

我不能確定如何將其納入一個加入代碼即可獲得我需要創建夾具,其中將包括徽標兩隊

+0

最好是在team_has_fixture稱爲team_id2另一列,然後你可以找到兩個隊的標誌在一個夾具。 team_id和team_id2參考團隊表。 –

+0

薩姆謝謝 - 我想我明白這將如何工作。現在編制如何編寫從兩個表中給出值的JOIN –

+0

您可能有助於展示一些示例數據。 –

回答

0

如果我理解數據的要求正確,夾具是涉及兩個團隊的項目。每個燈具都有一個唯一的ID號碼,所以如果球隊7和球隊5參與燈具3,那麼在team_has_fixture中會有兩排,就像這樣。

team_id fixture_id 
    5   3 
    7   3 

我還以爲你可以依靠你的系統上從指定只有一個團隊於燈具,或分配超過2隊不要。

您需要一種方法來提取兩支球隊每檯燈。在SQL中,這個子查詢將爲每個夾具提供一行,並提到兩個團隊。通過使用HAVING COUNT(*) = 2這個查詢排除了其他數量的團隊比兩個裝置。

SELECT MIN(team_id) AS team_a_id, 
     fixture  AS fixture_id, 
     MAX(team_id) AS team_b_id 
    FROM team_has_fixture 
    GROUP BY fixture_id 
HAVING COUNT(*) = 2 

然後,您可以構建一個SQL查詢來提供您提到的結果集。

SELECT t1.team_logo AS team_a_logo, 
     f.*, 
     t2.team_logo AS team_b_logo 
    FROM fixture AS f 
    JOIN (
      SELECT MIN(team_id) AS team_a_id, 
        fixture  AS fixture_id, 
        MAX(team_id) AS team_b_id 
      FROM team_has_fixture 
      GROUP BY fixture_id 
      HAVING COUNT(*) = 2 
     ) AS j ON f.fixture_id = j.fixture_id 
    JOIN team AS t1 ON t1.team_id = j.team_a_id 
    JOIN team AS t2 ON t2.team_id = j.team_b_id 

看看發生了什麼?我們採用雙向連接表並將其聚合爲三種連接子查詢。然後,我們進行三方加入,這就是你的結果。

請原諒我;我不知道如何渲染這樣的查詢到Codeigniter中。但是這應該讓你開始。

+0

感謝您對我的問題的回覆。我試着把球隊放進像你一樣的夾具中 - 在team_id和fixture_id下插入兩行到team_has_fixture中,當我在桌上做了測試查詢時,它返回了兩個相同的夾具,即它創建了兩個夾具,而不是一個夾具,球隊 –

相關問題