我正在尝试显示多个类别(儿童(的速度攀登比赛的起始顺序表。PHP/Mysql.有两条车道被简单地攀登,A和B。每个参赛者都要爬上两条车道。车道 A 的起始顺序和车道 B 的起始顺序应与车道 A 的起始编号顺序相同,交错为 50%,在起始车数量奇数的地方向下舍入。
示例:假设我有一个包含 9 个竞争对手的类别,从 101 到 109 开始。输出起始顺序表应如下所示:
Lane A Lane B
101 105
102 106
103 107
104 108
105 109
106 101
107 102
108 103
109 104
有什么想法吗?查询或几个循环或... 谢谢
编辑: 查询以按顺序获取表 车道 A 然后是车道 B:
create temporary table laneA
select * from competitors where category = 1 order by stNo;
create temporary table laneB
select * FROM competitors where category = 1 order by (case when stNo > (select avg(stNo) from competitors )then 1 else 2 end), stNo;
select 1 as rank, x.* from laneA as x
union ALL
select 2 as rank, y.* from laneB as y
order by rank;
drop temporary table laneA;
drop temporary table laneB;
将数据放在一个从零开始的数组中,循环访问它。计算访问要在第二列中显示的相应元素所需的索引:
$data = range(101, 109); // fake data array, [0 => 101, 1 => 102, ...]
$c = count($data);
for($i=0; $i<$c; ++$i) {
echo $data[$i] . ' - ' . $data[ ($i + $c / 2) % $c ] . "<br>n";
}
回显第一列中的当前元素,以及索引偏移元素计数一半的元素,再次通过计数的模数"钳制"到实际索引范围。(对于不均匀的计数,内部计算会导致最后带有 .5 的浮点数,但模运算会自动平衡这一点。
结果:
101 - 105
102 - 106
103 - 107
104 - 108
105 - 109
106 - 101
107 - 102
108 - 103
109 - 104
如果你再添加一个,所以你有偶数个项目,它将是
101 - 106
102 - 107
103 - 108
104 - 109
105 - 110
106 - 101
107 - 102
108 - 103
109 - 104
110 - 105