当从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中实现这一点
答案 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重新排序。