У меня есть база данных с таблицей записей журнала, которая выглядит следующим образом:
+-----------+------------------------+--------+
| Timestamp | Symbol_name | Status |
+-----------+------------------------+--------+
| 1 | Group2 | 1 |
| 2 | Group1-Device3-Signal1 | 1 |
| 3 | Group2-Device1-Signa13 | 0 |
+-----------+------------------------+--------+
Где Timestamp
- это double
, Symbol_name
- это varchar
, а Status
- этоint
.
Записи журнала, которые содержат вышеуказанные данные, будут вставлены в таблицу в режиме реального времени, и мой клиентский код должен запрашивать эти записи и анализировать их.Проблема, с которой я сталкиваюсь сейчас - это чтение уникальной записи каждого запроса.В настоящее время у меня есть эта функция:
/* Called every 1000 ms (1 second). */
gboolean app_models_timed_query(gpointer data) {
FwApp *app = data;
char query[APP_MAXIMUM_STRING_CHARS];
strncpy(query, "SELECT * FROM ", APP_MAXIMUM_STRING_CHARS);
strncat(query, app->query_db_table_name, APP_MAXIMUM_STRING_CHARS);
strncat(query, " WHERE Timestamp <> @lastSeenTimestamp AND Symbol_name <> @lastSeenSymbolName AND Status <> @lastSeenStatus;", APP_MAXIMUM_STRING_CHARS);
if (mysql_query(app->query_db_con, query))
{
printf("Unable to retrieve data from query table.\n");
return TRUE;
}
MYSQL_RES *result = mysql_store_result(app->query_db_con);
if (result == NULL) return TRUE;
/* Analyze the resulting row(s) here. */
/* How to set @lastSeenTimestamp, @lastSeenSymbolName and @lastSeenStatus here? */
return TRUE;
}
Функция вызывается каждую секунду, и в ней я запрашиваю базу данных, используя следующую инструкцию:
SELECT * FROM table1 WHERE Timestamp <> @lastSeenTimestamp AND Symbol_name <> @lastSeenSymbolName AND Status <> @lastSeenStatus;
Никаких двух записей никогда не будетбыть точно такими же, но они могут иметь одинаковую метку времени, статус или имя символа.
Обратите внимание, что перед тем, как разрешить вызов app_models_timed_query
каждую секунду, я устанавливаю пользовательские переменные следующим образом:
SET @lastSeenTimestamp = -1, @lastSeenSymbolName = '', @lastSeenStatus = 0;
И поскольку метки времени никогда не будут отрицательными, при первом вызове app_models_timed_query
первая строка будет в результате запроса.
Однако мой вопрос заключается в том, какустановить пользовательские переменные в последнюю строку результата моего запроса.Кроме того, я хочу знать, есть ли лучший способ чтения только недавно вставленных строк при каждом вызове app_models_timed_query
.
Большое спасибо, Vikas