Разделить отложенные ордера на две команды - PullRequest
1 голос
/ 22 мая 2011

Когда клиенты отправляют заказы на веб-сайт .. сотрудники могут просматривать отложенные заказы (извлекать данные из mysql) на административном сервере, но я хочу, чтобы отложенные заказы были разделены на две команды.

* ** 1003 тысяча два * Пример

Мы получили 21 отложенный ордер.

В штате 11 сотрудников.

Команда 1 : 5 сотрудников

Команда 2 : 6 сотрудников

Команда 1 может просматривать 11 заказов, а Команда 2 может просматривать 10

Иногда я могу получать 100 заказов каждый час - PHP должен решить разделить половину отложенных заказов на две команды (динамически) ...

Должен ли team_id указываться в таблице заказов? Например: tbl_orders.team_id = 2 когда пользователи отправляют заказы? .. но что, если не хватает сотрудников вошли в команду 1 или 2

1 Ответ

1 голос
/ 22 мая 2011

У вас есть 2 способа.

Первый (динамический)

Прежде всего, вы считаете все ожидания:

SELECT COUNT(*) FROM pending;

Затем вы показываете первую половину команде 1:

$half = round($count/2);
SELECT * FROM pending ORDER BY id DESC LIMIT $half;

Команда 2 получает:

SELECT * FROM pending ORDER BY id DESC LIMIT $half,$half;

Если у вас больше команд, вам просто нужно разделить общее количество команд на 2.

Второй вариант (фиксированный)

Когда вставляются ожидающие, вы связываете их с командой. Но вы должны добавить еще одно поле к вашей таблице.

Допустим, у вас есть поле team TINYINT(1) UNSIGNED.

Когда помещается следующий ожидающий, вы проверяете последнюю команду, вставленную с этим:

 SELECT team FROM pending ORDER BY id DESC LIMIT 1;

Допустим, у вас есть конфиг, в котором хранится ваше количество команд:

 $totalTeamsAvailable = 2;

С помощью значения, которое вы выбрали в запросе, который вы делаете:

 $nextTeam = (++$teamFromSql % $TotalTeamsAvailable) + 1;

Теперь у вас есть команда, которая может быть связана с этим ожиданием. Конечно, вы добавляете это с

 INSERT INTO pending (data,team) VALUES (,$nextTeam);

Это второе решение может страдать от состояния гонки. (IE: 2 ожидающих, размещенных на одном и том же рейте, могут быть связаны с одной и той же командой, но я считаю, что это не повредит вообще)

Addedum

Для подсчета команды, которая недавно что-то сделала, у вас есть 2 способа:

  • Вам нужна таблица teams, в которой хранятся последние данные для входа сотрудников.
  • Храните каждое действие, выполненное каждой командой (например, команда 1 одобрила и отправила ожидающий заказ № 2) с данными (возможно, у вас уже есть эта таблица)

На данный момент легко выбрать количество команд с недавней активностью.
Используя команду таблицы, вам просто нужно сделать:

$teamWithRecentlyActivity = SELECT COUNT(*) FROM teams WHERE lastLogin > (time() - (60*60*24));   
//> This select all teams within 1 day from last login

Имея этот номер, вы можете разделить все ожидающие запросы с помощью:

$pendingPerTeam = round($totalPendings / $teamWithRecentlyActivity);

И используйте это смещение в моем первом решении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...