如何在sql中维护队列号

时间:2015-08-06 20:55:37

标签: mysql laravel

我有一个waitlist表,与attendee表有很多关系。

基本上,候补名单中的与会者列表......我需要存储每个与会者在候补名单上的位置。 I.E. order_number是一个自动增量唯一int:1,2,3,4,5,6 ...

Waitlist_Attendee表
 ID
 attendee_id_fk
 waitlist_id_fk
 ORDER_NUMBER

我的问题是,如果我在候补名单中有一群参与者,如果我稍后从等候名单中删除参与者,如何更新order_number?说order_number=1从等候名单中删除。我需要更新order_number=2,现在为order_numer=1,并继续为每个order_number等等......

是否有自动重新加载数字的SQL方法,因此它始终是一个顺序列表?或者我是否需要编写排序函数来编号?

或者有更好的方式我不知道吗?

2 个答案:

答案 0 :(得分:1)

我猜您只需要通过您的与会者循环并更改订单号。

$waitList = WaitList::with(['attendees' => function($q){
$q->orderBy('order_number');
})->find(1);

$count = 1;
foreach($waitList->attendees as $attendees)
{
 WaitList::find(1)->attendees()->updateExistingPivot($attendees->id, ['order_number' => $count]);
$count++;
}

答案 1 :(得分:1)

您是否认为您可能不需要重新编号?输出列表旁边显示的数字是显示时间事件。只要列表按升序创建,即使删除了一个列表,您仍然可以选择前10个,即使数字从1到12,并且#2和#10已被删除。这只是一个LIMIT 10 ORDER BY id ASC - 和一个计数为1到10的循环用于显示(或者甚至只显示带有OLLI标签的十个项目来进行HTML编号。