2017-10-09 107 views
0

我想匹配一個表中的行與另一個表中的行,並且每行只匹配一次。我已經構建了下面的查詢,在其他方面工作正常,但我沒有進一步調整它,因此只能選擇一行。我想匹配一個表中的行與另一個表中的行,並且每行只匹配一次

try{$results_pref_school1 = $db->query('SELECT mps.mps_client_ec_no, mcs.mcs_client_ec_no, mps.mps_school_id, mcs.mcs_school_id 
              FROM match_pref_schools AS mps 
              INNER JOIN match_current_schools AS mcs 
              ON mps.mps_school_id = mcs.mcs_school_id 
              AND mcs.mcs_id IN (SELECT MIN(mcs.mcs_id) 
                   FROM match_current_schools AS mcs 
                   GROUP BY mcs.mcs_school_id) 
              ORDER BY mcs.mcs_id'); 
}catch (Exception $e){ 
     echo 'Failed to retrieve matched preferred school'; 
     exit; 

} 
$matched_school = $results_pref_school1->fetchAll(PDO::FETCH_ASSOC); 

$ matched_school的產生的var_dump:

Array 
(

[1] => Array 
    (
     [mps_client_ec_no] => REG5 
     [mcs_client_ec_no] => GL98888 
     [mps_school_id] => 6 
     [mcs_school_id] => 6 
    ) 

[2] => Array 
    (
     [mps_client_ec_no] => TAS4752 
     [mcs_client_ec_no] => ALF1252 
     [mps_school_id] => 14 
     [mcs_school_id] => 14 
    ) 

[3] => Array 
    (
     [mps_client_ec_no] => MAP002 
     [mcs_client_ec_no] => ALF1252 
     [mps_school_id] => 14 
     [mcs_school_id] => 14 
    ) 

) 

在上面的結果,我想ALF1252只進行一次匹配。

回答

0

@Parts 希望這對您的查詢

在此有幫助我增加了索引鍵刪除「使用,其中,使用加入緩衝液(塊嵌套循環)」,並添加一個 匹配的行和你的查詢性能現在是最好的。

QUERY:

SELECT mps.mps_client_ec_no,mps.mps_school_id, mcs.mcs_client_ec_no, mcs.mcs_school_id 
              FROM match_pref_schools AS mps INNER JOIN match_current_schools AS mcs 
              ON mps.mps_school_id = mcs.mcs_school_id 
              where mcs.mcs_id IN (SELECT MIN(mcs.mcs_id) 
                   FROM match_current_schools AS mcs 
                   GROUP BY mcs.mcs_school_id) 
              ORDER BY mcs.mcs_id 

指數:

KEY `mcs-key` (`mcs_school_id`,`mcs_id`,`mcs_client_ec_no`) 

KEY `mps-key` (`mps_school_id`,`mps_client_ec_no`) 

INSERT INTO match_current_schools (mcs_idmcs_client_ec_nomcs_school_idmcs_distr_idmcs_province_idmcs_client_level_taughtmcs_sub1_idmcs_sub2_id)VALUES(6,'XYZ',1,27,3,'HIGH SCHOOL - A LEVEL',1, 9);

檢查這裏:http://sqlfiddle.com/#!9/c4103d/2

+0

http://sqlfiddle.com/#!9/f47c7/1 – Parts

+0

@kuldeed。我改變了我的表格,並建議查詢,但我仍然得到相同的結果。檢查這裏:http://sqlfiddle.com/#!9/8098cb/1 – Parts

+0

@部分結束reslt你想要輸出?請告訴我 –

相關問題