替代值应存储在php中的数组中的替代位置

时间:2016-10-13 11:45:23

标签: php mysql arrays

当从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(' 3')应该开始添加当前 course_id(' 2')。同样明智的是,所有的course_id值都应该在数组中相加。如何在php中实现这一点

1 个答案:

答案 0 :(得分: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

子查询添加了一个额外的position列,该列在每个课程ID中按顺序计数。然后外部查询首先按位置重新排序所有内容,然后按课程ID重新排序。