2016-10-13 9 views
1

mysqlの値をフェッチして値を配列に直列順に格納すると、しかし、値を代わりの位置に配列に格納したい。ここで代替値は、配列内の代替位置に格納する必要があります。


Course_IDに( '1')値 S

Array ( 
     [0] => 15BCA01 [1] => 15BCA02 [2] => 15BCA03 [3] => 15BCA04 [4] => 15BCA05 
     [5] => 15BCA06 [6] => 15BCA07 [7] => 15BCA08 [8] => 15BCA09 [9] => 15BCA10 
     [10] => 15BCA11 
     ) 

Course_IDにテーブルからいくつかの個々の値( '2')の値:

Array ( 
     [0] => 15MCA01 [1] => 15MCA02 [2] => 15MCA03 [3] => 15MCA04 [4] => 15MCA05 
    ) 

Course_IDに(3 '')値:

Array ( 
     [0] => 15MBA01 [1] => 15MBA02 [2] => 15MBA03 [3] => 15MBA04 [4] => 15MBA05 
     ) 

Course_IDに(4 '')値:

Array ( 
     [0] => 15MSC01 [1] => 15MSC02 [2] => 15MSC03 
     ) 

Course_IDに(5 '')値:

Array ( 
     [0] => 15TAM01 [1] => 15TAM02 
     ) 
私はmysqlコマンド私は(直列にいつものように)取得していた出力電流を

select register_number from master where master_course_id in('1','2','3','4','5'); 

を実行


:私が欲しい

Array ( 
     [0] => 15BCA01 [1] => 15BCA02 [2] => 15BCA03 [3] => 15BCA04 [4] => 15BCA05 
     [5] => 15BCA06 [6] => 15BCA07 [7] => 15BCA08 [8] => 15BCA09 [9] => 15BCA10 
     [10] => 15BCA11 [11] => 15MCA01 [12] => 15MCA02 [13] => 15MCA03 [14] => 15MCA04 
     [15] => 15MCA05 [16] => 15MBA01 [17] => 15MBA02 [18] => 15MBA03 [19] => 15MBA04 
     [20] => 15MBA05 [21] => 15MSC01 [22] => 15MSC02 [23] => 15MSC03 [24] => 15TAM01 
     [25] => 15TAM02 
) 

所望の出力(代替ポジション):

Array ( 
     [0] => 15BCA01 [1] => 15MCA01 [2] => 15BCA02 [3] => 15MCA02 [4] => 15BCA03 
     [5] => 15MCA03 [6] => 15BCA04 [7] => 15MCA04 [8] => 15BCA05 [9] => 15MCA05 
     [10] => 15BCA06 [11] => 15MBA01 [12] => 15BCA07 [13] => 15MBA02 [14] => 15BCA08 
     [15] => 15MBA03 [16] => 15BCA09 [17] => 15MBA04 [18] => 15BCA10 [19] => 15MBA05 
     [20] => 15BCA11 [21] => 15MSC01 [22] => 15TAM01 [23] => 15MSC02 [24] => 15TAM02 
     [25] => 15MSC03 
    ) 

Course_IDに(「1」)から配列内の最初の値は、第二の値がCourse_IDに(「2」)からでなければならない代わりに、彼らは、アレイに追加する必要意味する場合。 Course_IDにあれば( '1')現在Course_IDに( '2')を追加を開始すべきである次Course_IDに(3 '')を完了しました。賢明なように、すべてのcourse_id値は配列に交互に追加する必要があります。どのようにPHPでこれを実現する

答えて

1

MySQLでは、ユーザ定義変数を使用してmaster_course_idグループ内で順序を追加する必要があります。

SELECT register_number 
FROM (
    SELECT master_course_id, register_number, 
     @position := IF(master_course_id = @prev_course, @position+1, 1) AS position, 
     @prev_course := master_course_id 
    FROM (SELECT * FROM master 
      WHERE master_course_id IN ('1', '2', '3', '4', '5') 
      ORDER BY master_course_id, register_number) AS m, 
    CROSS JOIN (SELECT @position := 0, @prev_course := null) AS vars 
) AS t 
ORDER BY position, master_course_id 

サブクエリは、各コースのIDの中に順次カウントアップし、余分なposition列が追加されます。次に、外側のクエリは、すべてを位置順に、次にコースID順に並べ替えます。

+0

hi @Barmar i m checking。私はYiiのフレームワークでこれを維持しなければならないと私は言うでしょう –

+0

こんにちは@Barmarは、最初の15BCA01、15MCA01、15MBA01、15MSC01、15TAM01,15BCA02,15MCA02,15MBA02 ......... ..しかし、私は15BCA01、15MCA01、15BCA02、15MCA02、15BCA03、15MCA03 .......... 15BCA06、15MBA01、15BCA07、15MBA02、15BCA08 15MBA03 .......... 15BCA11ようにしたいです、 15MSC01、私は質問を再読15TAM01、15MSC02、15TAM02、15MSC03 –

+0

は、私はあなたが欲しい順序を理解していません。これらの数字はすべて似ているので、パターンを見るのは難しいです。 – Barmar