download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Log на php

Автор
Съобщение
dreamskill
Пет, 29.03.13, 11:48
Има въпрос, който ме мъчи от дълго време. Трябва да направя система за хронология за игра на php.
Трябва ми помощ за дизайна на таблиците в mysql. Трябва ми подробна хронология на всичко, за да оправям бъговете по-добре.
За сега съм помислил да имам една главна таблица със следните колони:
Ще имам полетата id, time, user_id, type.
Мисля, че всичко ви е ясно освен type.
Type ще съдържа стойност, която ще показва каква е промяната и в коя вторична таблица да търсим повече инфо.
Ако потребителя си смени имейла, тъй като това е "системна настройка" за потребителя в type ще има 0 и в друга таблица, да речем logUserSystem ще се запише новия имейл и стария имейл.
Така ще мога да видя точно какво е променил.
Също така и като се атакува например - type ще е 1 и в logUserAttack ще се запишат id-тата на единиците (всяка единица си има свое id) и мястото, където ще атакуват.
Обаче проблема в този случай е, че трябва да пусна 2 заявки - с едната да взема type и в зависимост от това да знам към коя друга таблица да се обърна. И това ми е се струва неоптимизирано.
Чакам вашата помощ.
insecteater
Пет, 29.03.13, 12:35
А защо трябва да имаш главна таблица изобщо? Имаш да речем няколко таблици, чиито имена започват с log_
да речем log_system, log_attack и т. н. и в зависимост от типа на събитието директно си записваш в която таблица е необходимо.
dreamskill
Пет, 29.03.13, 12:42
Neat! Не знам защо не бях се сетил.
insecteater
Пет, 29.03.13, 14:35
Ако искаш да изкараш общ резултат от няколко таблици, които имат еднакви колони, може да направиш нещо подобно:
SELECT UID, eventtime, 'changepass' AS activity FROM log_changepass 
UNION
SELECT  UID, eventtime, 'brute' AS activity FROM log_brute;

Това цялото е една заявка по принцип, която се състои от няколко под заявки, съединени с UNION. 'changepass' as activity и 'brute' as activity са добавени, за да се подсещаш като излезе резултата от коя таблица е дошъл всеки ред. Другите колони в таблиците може да са всякакви - на заявката не и пука, изкарва ти колоната с потребителските ID-та, времето и "вида" на събитието (в случая смяна на парола или брут атака).

Като резултат ще имаш нещо подобно:
UID	eventtime		activity

1	2013-01-04 18:36:23	changepass
0	2013-02-02 16:23:12	changepass
1	2012-04-08 18:12:45	changepass
1	2010-11-21 11:12:32	brute
0	2009-02-11 05:56:21	brute

Дръж си логовете в различни таблици, ако данните за различните събития са прекалено различни по количество и вид. Но ако са сходни, би било по-добре да ги държиш в една таблица, с 2-3 по-общи полета.

Редакция: Забравих да сложа ORDER BY eventtime DESC в края, но ти си умен и ще се сетиш

редактиран от insecteater на 29.03.13 14:39
редактиран от insecteater на 29.03.13 14:44

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.