Склейка - это, как ни крути, все равно 2 запроса :( А я указал последовательность ее.
Вид для печати
Так а теперь ты прочти мои предыдущие сообщения.
Хотя давай я лучше сделаю тебе краткий пересказ основного: не лучше ли напрячь обработкой данных базу данных, которая работает в отдельном запросе, позволив серверу заниматься своими делами, нежели каждый божий раз напрягать сервер? И хочу напомнить, что запись логов происходит довольно часто. И те самые 0.002 миллисекунды в перспективе дают приличный такой застой. И у тебя есть вариант, который избавит от этого застоя, но ты от него отказываешься просто потому что. Не кажется это нелогичным?
Подожди, а при чем здесь мультипоточность? Все и так будет выполняться в том потоке, в каком ты указал.
Ты, видимо, не понимаешь, что я хочу до тебя донести. Запросы будут идти все равно в отдельном потоке, а вставка в БД будет выполняться согласно типу лога, какой указывается из static.
Пример:
В итоге все выглядит как: игрок 2 передал игроку один 5к баков. Сортировка идет согласно LOG_TYPE. Так при чем здесь мультипоточность?PHP код:
const LOG_TYPE_MONEY 1;
INSERT INTO `logs` ( `owner_id`, `sender_id`, `type`, `count` ) VALUES ( '1', '2', 'LOG_TYPE_MONEY', '5000' )
Во-первых, хранить тип лога в виде текста для каждой строки - крайне сомнительное удовольствие как по части памяти (вместо 1 символа будет записываться 10), так и по части выборки данных из такой таблицы (ты думаешь, просто так люди придумали создавать столбец, который будет хранить номер строки в виде числа, по которому происходит большинство обращений к строкам? Сравнить 2 числа гораздо проще и быстрее, нежели 2 строки).
Во-вторых, даже если ты обозначил так вставку содержимого константы в строку (непонятно, правда, зачем ты тогда выделил число апострофами), всё ещё стоит вопрос о том, что гораздо проще запомнить: текст капсом, что написан на английском или текст на русском?
Смотри как можно сделать проще и удобнее:
И использование:PHP код:
stock WriteLogByTypeName(type_name[], account_id, log_message[])
{
static
string[159+11+MAX_LOG_MESSAGE+MAX_LOG_TYPE+1];
string[0] = '\0';
format(string, sizeof(string),
"\
INSERT INTO log_system (account_id, log_type_id, log_message, log_data) \
SELECT %d, lt.log_type_id, '%s', NOW() FROM log_type_list as lt WHERE lt.log_type_name = '%s'\
",
account_id,
log_message,
type_name);
mysql_tquery(MySQL:handle, string, "", "");
return 1;
}
И не нужно запоминать никаких LOG_TYPE_MONEY и прочего треша. Привычные слова, которые отражают суть, гораздо проще держать в памяти, нежели имена констант.PHP код:
WriteLogByTypeName("Продажа авто", pInfo[playerid][pAccountID], "На руках было 100$, а стало 100100$");
Реализуй ты всё то же самое без второй таблицы, тебе придётся запускать цикл и сверять значение "type_name" со значением строк из массива, который ты создашь перед этим
Это был пример, а не кусок готового кода. Да, я записываю не текст, а 1 в тип лога.
Если ты используешь ( OMG ), русский текст для определения типа лога, то ты, явно, не имел дела с нормальными системами логирования.
INSERT and SELECT в данной системе сразу? Оо.
Этого достаточно, чтобы понять, что ты не сталкивался и придумываешь бред на ходу. Больше даже отвечать не хочу.
Алло, гараж, в таблицу с логами названия типов этих самых логов не попадают. Мне всё больше начинает казаться, что ты крайне слаб в SQL и не понимаешь о чём говоришь.
Вот так будет выглядеть результат
Вот этого запроса:
То бишь, запрос сам определит ID типа и подставит егоPHP код:
INSERT INTO log_system (account_id, log_type_id, log_message, log_data) SELECT 5, lt.log_type_id, 'Текст логов', NOW() FROM log_type_list as lt WHERE lt.log_type_name = 'Продажа авто'
А твоих слов достаточно понять, что твои знания по части MySQL ограничиваются лишь статьями, что есть на форумах Pawn, где описывается лишь 4 типа запросов (SELECT, UPDATE, INSERT И DELETE), а дальше ты и не изучал ничего. Для тебя, наверное, будет открытием, что в запросе одновременно можно работать с неограниченными числом таблиц и что операторы можно совмещать (то, что я и сделал, собственно)
А твоё высказывание в чат про то, что я стал Оксом, наводит на мысли о том, что ты просто не можешь принять свою ошибку
Ага, ок.