myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Web Статистика С Использованием Единой Базы Данных Sqlite

Теги
Jaska
сообщение 23.9.2008, 9:16
Сообщение #1


Освоившийся участник
*****

Группа: Администраторы
Сообщений: 344
Регистрация: 2.6.2008
Из: RB,Ufa
Пользователь №: 8
Спасибо сказали: 106 раз




Пришла задумка сделать такую статистику:

Хаб создает базу данных SQLite в которую я записываю онлайн, шару и прочую необходимую инфу. Эту базу данных использует сайт для вставки инфы "куда надо"

Работа ступорится из-за SQLite, вернее из-за моего незнания ..

CODE
sMainPath = "HubStat\\"

dofile("libs\\sqlite3.lua")

local init, error = package.loadlib("PXSQLite3", "luaopen_pxsqlite3")
local db = sqlite3.open_memory()

function OnStartup()
if not loadfile(sMainPath) then
os.execute("mkdir \""..sMainPath.."\"")
end
TmrMan.AddTimer(1000)
local stmt = db:prepare("SELECT * FROM Report")
if not stmt then
db:exec("CREATE TABLE HubStat (id STRING PRIMARY KEY, count)") -- не знаю правильно ли так делать, но я хочу чтоб id был строкой типо "Онлай", "Шара" .. в принципе повроторений быть не должно.
end
end

function OnTimer()
GetHubStat()
end

function GetHubStat()
local sUpTime = Core.GetUpTime()
db:exec("INSERT INTO HubStat VALUES ('UpTime', '"..sUpTime.."');") -- заносим в бд .. опять таки не уверен в правильности своих действий
for row in db:rows("SELECT * FROM HubStat") do
if row.id == id then
Core.SendToAll(row.count) -- это я для проверки что все правильно записалось ..
end
end
end

function OnExit()
db:close()
end


скулайт дается тяжело .. скорее всего у меня где-то грубые ошибки.
Go to the top of the page
+Quote Post
Setuper
сообщение 23.9.2008, 14:25
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Да уж... хрен знает что делаешь))))))

1. Если подключаешь файл
Код
dofile("libs\\sqlite3.lua")
, то строчка
Код
local init, error = package.loadlib("PXSQLite3", "luaopen_pxsqlite3")
не нужна!

2. Функция open_memory() создаёт временную базу данных. Если ты хочешь считывать из бд, то надо знать откуда считывать, поэтому надо создавать постоянную бд. open("путь".."имя_файла.db3")

3. Функция
Код
loadfile(sMainPath)
вообще непонятно что делает. По ходу дела она пытается загрузить вместо файла всего лишь путь))))

4. В части кода:
Код
local stmt = db:prepare("SELECT * FROM Report")
if not stmt then
db:exec("CREATE TABLE HubStat (id STRING PRIMARY KEY, count)") -- не знаю правильно ли так делать, но я хочу чтоб id был строкой типо "Онлай", "Шара" .. в принципе повроторений быть не должно.
end
также написан бред! Ты ваобще понимаешь что делается, или просто так наобум пишешь? Ты написал следующее: Если не существует таблицы Report, то создаём таблицу HubStat. Чета вообще чтото несвязанное такое получилось. Спрашивается нафига при отсутствии таблицы Report создавать совершенно другую таблицу, с другим именем, тем более что действие по созданию таблицы не выполняется если таковая таблица уже существует. Должно быть просто вот так:
Код
db:exec("CREATE TABLE HubStat (id STRING PRIMARY KEY, count)")


5. Тут тоже неверно:
Цитата
-- не знаю правильно ли так делать, но я хочу чтоб id был строкой типо "Онлай", "Шара" .. в принципе повроторений быть не должно.
Слова PRIMARY KEY - означают первичный ключ. Свойства первичного ключа таковы, что по нему идет связь нескольких таблиц и кроме этого первичный ключ уникальный, то есть не повторяется никогда (какие бы 2 строки таблицы ты не взял - первичный ключ должен быть разным). Зачем спрашивается тебе брать для параметра онлайн или оффлайн первичный ключ? Заведи под эти нужды новый параметр, который не будет первичным ключом, а первичный ключ лучше оставить целого типа, т.е. INTEGER, тем более, что sqlite автоматически выставляет такого типа ключи, поэтому не надо об них заботится, все сделается автоматически в порядке возрастания натуральных чисел))))

6. Спрашивается нафига делать такую таблицу:
Код
HubStat:
id = "Onlain", count=10
id = "UpTime", count=100

Когда гараздо эффективнее сразу все продумать и сделать так:
Код
HubStat:
id = 1, Onlain=10, UpTime=100


И к таму же у тебя получатся всеравно повторения в твоем случае (потому что ты не обновляешь данные, а записываешь новые!!!):
Код
HubStat:
id = "Onlain", count=10
id = "UpTime", count=100
id = "Onlain", count=11
id = "UpTime", count=100
id = "Onlain", count=12
id = "UpTime", count=100
видишь первичный ключ повторяется! это не верно!!! я даже не знаю, что на это тебе скажет sqlite - наверное просто зависнет)))))

7. Для обновления данных служит команда UPDATE.
То есть вот как должен выглядеть твой код:
Код
dofile("libs\\sqlite3.lua")

function OnStartup()
    db = sqlite3.open("путь\\имя_файла.db3")
    TmrMan.AddTimer(1000)
    db:exec("CREATE TABLE HubStat (id INTEGER PRIMARY KEY, online INTEGER, share INTEGER)")
end

function OnTimer()
    GetHubStat()
end

function GetHubStat()
    local stmt=db:prepare("SELECT * FROM HubStat")
    if stmt and stmt:first_row() then
        db:exec("UPDATE HubStat SET online='"..Core.GetUpTime().."', share='"..Core.GetCurrentSharedSize().."'")
    else
        db:exec("INSERT INTO HubStat (online,share) VALUES ('"..Core.GetUpTime().."', '"..Core.GetCurrentSharedSize().."')")
    end

    -- это для проверки
    local stmt=db:prepare("SELECT * FROM HubStat")
    if stmt and stmt:first_row() then
        local tTbl=stmt:first_row()
        Core.SendToAll("Хаб онлайн "..tTbl.online.." секунд.\tОбщая шара хаба "..tTbl.share.." байт.")
    end -- конец проверки
end

function OnExit()
    db:close()
end
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Topic has attachmentsСтатистика
версия 2.0
9 Accelerator 14 703 21.3.2017, 18:32 Посл. сообщение: Alexey
No New Posts Sqlite
Unix | База данных
3 Setuper 10 789 10.2.2016, 21:15 Посл. сообщение: Alexey
No New Posts Перенос базы пользователей с RusHub на PtokaX
3 Angel_D 8 345 5.12.2015, 2:11 Посл. сообщение: Saymon21
No new Topic has attachmentsСкрипты API 2. Защита хаба. Базы TTH
Скрипты защиты от спама, флуда, рекламы, порно
40 GULAM33 44 134 24.5.2015, 16:55 Посл. сообщение: Артём
No New Posts Базы CustomLocations.zip
Ссылки на готовые базы
0 Enyby 6 028 4.12.2011, 9:48 Посл. сообщение: Enyby
No new Статистика по крупнейшим хабам в .ru
14 pro 16 800 26.5.2011, 0:14 Посл. сообщение: pro
No New Posts Переход с файла *.tbl в базу данных SQL
SQL
0 kks 4 579 29.3.2011, 14:28 Посл. сообщение: kks
No New Posts Запрос в базу данных sqlite клиента
Запрос и экспорт данных из базы данных sqlite клиента
9 derschaman 14 559 5.1.2011, 2:03 Посл. сообщение: Nickolya
No New Posts Статистика файлобмена
Нужен скрипт
2 WorldWide 6 053 11.12.2010, 15:39 Посл. сообщение: Setuper
No New Posts От: Статистика файлобмена
От темы с ID: 4136
0 Saymon21 3 836 11.12.2010, 15:35 Посл. сообщение: Saymon21
No new Topic has attachmentsUserinfo [ By Nickolya ] [ Sqlite Db ] [ Lua5.1 ] [ Api 1 ]
API1 | Скрипт оффлайн информации по юзерам
20 Nickolya 26 256 2.11.2010, 9:05 Посл. сообщение: kool
No New Posts Статистика пиров по TTH
Незнаю с чего начинать :-)
8 Dset 12 300 26.10.2010, 10:47 Посл. сообщение: Atlant
Closed Статистика
3 grifons 6 346 12.9.2010, 14:12 Посл. сообщение: serrrios
Closed Скрипт для внесени в данных в MySQL прям из чата командой.
Нужно маленький скриптик который будет экспортировать определенный тек
1 DEN 007 6 074 4.7.2010, 9:45 Посл. сообщение: Setuper
No New Posts Веб статистика банов
2 soad 6 517 29.6.2010, 18:31 Посл. сообщение: soad

 



RSS Сейчас: 23.4.2024, 13:21