Существует расписание каких-то ивентов, которые указаны в массиве.
Например, каждый понедельник в 18:00 стартует определённый ивент.
Необходимо показать диалогом когда будет ивент и чтобы в последний раз выпадало:
Чтобы узнать когда именно будет ивент (сегодня вторник, значит через 6 дней), решил воспользоваться MySQL запрос.
Теперь необходимо ниже вывести список выпавших в прошлый раз предметов (могут и не быть).
Так вот, можно ли это как-то вывести одним запросом или лучше отделить их? При использовании UNION, непонятно, когда будет начинаться вывод списка предметов или же даты? Или же если сначала отправили запрос с датой, потом через UNION соединили второй запрос с получением списка предметов, то 1-я строка обязательно будет дата, а уже все остальные - предметы?
Информация об старте ивента
PHP код:
enum e_EventRefillTime
{
ERT_WEEKDAY,
ERT_HOURS,
ERT_MINUITES
}
new
EventRefillTime[][e_EventRefillTime] =
{
{0, 18, 00} // Каждый понедельник в 18:00
};
Запрос на получение даты:
PHP код:
new
year, month, day,
weekday;
getdate(year, month, day);
weekday = GetDayOfWeek(year, month, day); // Получили день недели
new
cur_event,
cur_day_left = 7,
tmp_day_left;
// Получаем первый ивент, который состоится и сколько дней до него осталось
for (new i = 0; i < sizeof EventRefillTime; ++i)
{
tmp_day_left = EventRefillTime[i][ERT_WEEKDAY] - weekday;
tmp_day_left = tmp_day_left < 0 ? tmp_day_left : -(tmp_day_left);
if (tmp_day_left < cur_day_left)
{
cur_day_left = tmp_day_left;
cur_event = i;
}
}
// Теперь к сегодняшней дате, и времени ивента прибавим сколько дней осталось
mysql_format(mysql, FormatData_512, sizeof FormatData_512, "\
SELECT \
(DATE_ADD(\"%d-%d-%d %02d:%02d:00\", INTERVAL %d DAY)) AS event_date",
year, month, day,
EventRefillTime[i][ERT_HOURS],
EventRefillTime[i][ERT_MINUITES],
cur_day_left
);
new
Cache:cache_id = mysql_query(mysql, FormatData_512, true),
event_date[19 + 1];
cache_get_value_name(0, "event_date", event_date);
cache_delete(cache_id);
- - - Добавлено - - -
И т.к. я показываю в диалоге дату ивента и последние выпавшие предметы, то каждый раз при срабатывание этого же ивента - старые удалить и добавить новые. Но используется многопоточные запросы. И когда буду удалять старые предметы, а затем добавлять новые - нет гарантий, что запрос на удаление придёт раньше, чем на добавление. Как в этом случае лучше быть?