2017-10-09 17 views
0

1つのテーブルの行と別のテーブルの行を一致させたいです。私は次のようなクエリを構築しました。それ以外の点では、行を一度しか選択できないように、それをさらに調整することに失敗しています。 $のmatched_schoolのあるテーブルの行と別のテーブルの行とを一致させ、各行を1回だけ一致させる必要があります。

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

の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 希望これは私が「どこ使用し、バッファ(ブロックネステッド・ループ)に参加の使用」削除のためのインデックスキーを追加したクエリこの中

のために有用である、と1つの マッチした行を追加し、クエリのパフォーマンスが最適です。

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 

インデックス:match_current_schools (mcs_idmcs_client_ec_nomcs_school_idmcs_distr_idmcs_province_idmcs_client_level_taught INTO

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

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

INSERT、mcs_sub1_idmcs_sub2_id)値(6、 'XYZ'、1,27,3、高等学校 - レベル、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

出力の@Parts終了私に教えてください –

関連する問題