myDC.ru

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

 
6 страниц V  < 1 2 3 4 5 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов с SQL, вопросы по скриптам (мелкие вопросы)

Теги
Wariner
сообщение 3.3.2009, 21:58
Сообщение #41


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




не это понятно, а дальше? мой мозг упорно хочет думать что по этому запросу будет содержание этих ячеек а выходит таблица
Go to the top of the page
+Quote Post
Setuper
сообщение 3.3.2009, 22:16
Сообщение #42


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

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




http://mydc.ru/ipb.html?s=&showtopic=7...post&p=1995
Код
local tMsg = DoFirstSelect("SELECT msg FROM table WHERE ip = 'ip2'")
Core.SendToAll(tostring(tMsg.ip))
Go to the top of the page
+Quote Post
alex82
сообщение 3.3.2009, 22:43
Сообщение #43


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Setuper

Можешь написать скриптик для тестирования проблемных запросов?
Go to the top of the page
+Quote Post
Setuper
сообщение 3.3.2009, 23:36
Сообщение #44


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

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




Скрипт для тестирования SQLite: Прикрепленный файл  test_sqlite.lua ( 1.66 килобайт ) Кол-во скачиваний: 3

Ниже приведены результаты тестов для мною собранной библиотеки: Прикрепленный файл  PXSqlite3.rar ( 177.65 килобайт ) Кол-во скачиваний: 4

Код
Version sqlite: 3.6.11
CREATE TABLE test (id INTEGER PRIMARY KEY, content Text): true
CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
INSERT INTO test (content) VALUES('value'): true
INSERT INTO test (content) VALUES('value2'): true
INSERT INTO test2 (content) VALUES('value'): false
SELECT * FROM test: true
SELECT * FROM test2: true
DROP TABLE test2: false
SELECT * FROM test2: false
UPDATE test SET content='val' WHERE id='1': true
SELECT content FROM test WHERE id='1': val
Go to the top of the page
+Quote Post
alex82
сообщение 4.3.2009, 0:54
Сообщение #45


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Код
[23:40:44] Version sqlite: 3.2.7
[23:40:44] CREATE TABLE test (id INTEGER PRIMARY KEY, content Text): true
[23:40:44] CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
[23:40:44] INSERT INTO test (content) VALUES('value'): true
[23:40:44] INSERT INTO test (content) VALUES('value2'): true
[23:40:44] INSERT INTO test2 (content) VALUES('value'): true
[23:40:44] SELECT * FROM test: true
[23:40:44] SELECT * FROM test2: true
[23:40:44] DROP TABLE test2: true
[23:40:44] SELECT * FROM test2: false
[23:40:44] UPDATE test SET content='val' WHERE id='1': true
[23:40:44] SELECT content FROM test WHERE id='1': val


Странно, но DROP работает.

PS. Обьясни плиз блондинке(то бишь мнеbig_smile.gif), что делает функция CheckSelect.
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2009, 1:19
Сообщение #46


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

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




Функция CheckSelect проверяет возвращает ли запрос SELECT данные (возвращает true, если запрос возвращает данные и nil в противном случае).

Так то оно так, но вот попробуй вот такую проверку:
Код
function OnStartup()
  DoSql"CREATE TABLE test (id INTEGER PRIMARY KEY, content Text)"
  DoSql"CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text)"
  DoSql"DROP TABLE test2"
  DoSql"INSERT INTO test2 (content) VALUES('value')"
  db:close()
end


При правильной работе библиотеке результат должен быть следующим:
Код
CREATE TABLE test (id INTEGER PRIMARY KEY, content Text): true
CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
DROP TABLE test2: true
INSERT INTO test2 (content) VALUES('value'): false


Я думаю, что у тебя не получится такого результата.

Для просмотра базы данных используй sqlite браузер: Прикрепленный файл  SQLite_Database_Browser.rar ( 1.06 мегабайт ) Кол-во скачиваний: 5
Go to the top of the page
+Quote Post
alex82
сообщение 4.3.2009, 1:34
Сообщение #47


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Код
[00:29:29] CREATE TABLE test (id INTEGER PRIMARY KEY, content Text): true
[00:29:29] CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
[00:29:29] DROP TABLE test2: true
[00:29:29] INSERT INTO test2 (content) VALUES('value'): false


Именно такой и получился.

Но при просмотре базы в браузере, таблица test2 присутствовала.
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2009, 2:02
Сообщение #48


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

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




Вот и я о том же.

Вообще какое-то странное поведение


Я немного неверно написал в функции CheckSelect. Надо так:
Код
local function CheckSelect(request, no)
    local stmt=db:prepare(request)
    if stmt and stmt:first_row() then
      if bDebug then
        Core.SendToAll(request..": "..tostring(not no))
      end
      return true
    end
    if bDebug then
      Core.SendToAll(request..": "..tostring(no or "false"))
    end
    return nil
end


Но просмотр через браузер говорит, что таблица не удаляется.

Код
  DoSql"CREATE TABLE test (id INTEGER PRIMARY KEY, content Text)"
  DoSql"CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text)"
  DoSql"DROP TABLE test2"
  CheckSelect"SELECT * FROM test2"
  DoSql"CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text)"
  DoSql"INSERT INTO test2 (content) VALUES('value')"
  CheckSelect"SELECT * FROM test2"


Результат:
Код
CREATE TABLE test (id INTEGER PRIMARY KEY, content Text): true
CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
DROP TABLE test2: true
SELECT * FROM test2: false
CREATE TABLE test2 (id INTEGER PRIMARY KEY, content Text): true
INSERT INTO test2 (content) VALUES('value'): true
SELECT * FROM test2: false
Go to the top of the page
+Quote Post
alex82
сообщение 4.3.2009, 13:26
Сообщение #49


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Копнул либу чуть глубже.

Блин, такая же хрень, что и LuaSocket - большинство низкоуровневых функций написано на Lua.

Отпало всякое желание копаться дальше в этом гуане.

Переделал тестовый скрипт для вывода сообщений об ошибках вместо false.
Код
[12:13:53] DROP TABLE test2: database disk image is malformed
[12:13:53] INSERT INTO test2 (content) VALUES('value'): database disk image is malformed

Мдя...
Go to the top of the page
+Quote Post
Wariner
сообщение 4.3.2009, 18:05
Сообщение #50


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Цитата(Setuper @ 3.3.2009, 22:16) *
http://mydc.ru/ipb.html?s=&showtopic=7...post&p=1995
Код
local tMsg = DoFirstSelect("SELECT msg FROM table WHERE ip = 'ip2'")
Core.SendToAll(tostring(tMsg.ip))

я так понимаю должно быть:
Код
local tMsg = DoFirstSelect("SELECT msg FROM table WHERE ip = 'ip2'")
Core.SendToAll(tostring(tMsg.msg))


сколько цифр может хранить тип NUMERIC?
может конечно дело и не в этом. просто в SQL браузере я смотрю правильное количество шары, а скрипт выводит на порядок меньше
460995173 --выводит
34820733541 -- должно быть
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2009, 18:34
Сообщение #51


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

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




В sqlite числовые типы служат только для сортировки, поэтому числа можно хранить и в текстовых полях. То есть под шару следует ставить тип TEXT
Go to the top of the page
+Quote Post
Wariner
сообщение 21.3.2009, 0:06
Сообщение #52


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Есть вполне рабочий код:
Код
function OnStartup()
    require "luasql.mysql" -- подключаем библиотеку
    env = assert (luasql.mysql()) -- вызываем основную функцию из библиотеки
    con = assert (env:connect("test","root","пароль","localhost"))    -- соединяемся с базой данных
    res = assert (con:execute[[
        CREATE TABLE IF NOT EXISTS MsgTop(
        Nick varchar(50) NOT NULL PRIMARY KEY,
        Msg MEDIUMINT(10) NOT NULL
        )
    ]])
end

function OnExit()
    --cur:close()
    con:close()
    env:close()
end    

function ChatArrival(tUser, sData)
    local cur = assert(con:execute("SELECT Nick, Msg from MsgTop WHERE Nick = '"..tUser.sNick.."'"))
    row = cur:fetch ({}, "a")
    if not row then
        local res = assert(con:execute(string.format("INSERT INTO MsgTop VALUES ('%s', '%s')]], tUser.sNick, 1")))
    else
        local iMsg = row.Msg + 1
        local res = assert(con:execute("UPDATE MsgTop SET Msg = "..iMsg.." WHERE Nick = '"..tUser.sNick.."'"))    
    end
end


Обычный топ сообщений.

2Setuper: Что можно исправить в самом коде(корявости и т.д.) и как сделать сортировку? позволяет ли MySQL автоматически сортировать таблицу или как всегда ручками!
Go to the top of the page
+Quote Post
alex82
сообщение 21.3.2009, 0:32
Сообщение #53


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Код
      local iMsg = row.Msg + 1
        local res = assert(con:execute("UPDATE MsgTop SET Msg = "..iMsg.." WHERE Nick = '"..tUser.sNick.."'"))

А почему бы не сделать проще:
Код
assert(con:execute("UPDATE MsgTop SET Msg = Msg+1 WHERE Nick = '"..tUser.sNick.."'"))


А сортировка, если я не ошибаюсь, производится так:
Код
con:execute("SELECT Nick, Msg from MsgTop ORDER BY Msg")
Go to the top of the page
+Quote Post
Setuper
сообщение 21.3.2009, 0:59
Сообщение #54


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

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




Сортировка:
Код
SELECT select_expression FROM table WHERE where_definition ORDER BY col_name [ASC | DESC]


Курсоры всегда нужно закрывать, если их используешь!!!


Код
require "luasql.mysql"
local env = assert(luasql.mysql())
local con = assert(env:connect("test","root","пароль","localhost"))

assert(con:execute[[
  CREATE TABLE IF NOT EXISTS `MsgTop`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `Nick` VARCHAR(64) NOT NULL,
    `Msg` MEDIUMINT(10) NOT NULL DEFAULT 0,
    PRIMARY KEY(`id`),
    UNIQUE(`Nick`)
  )
]])

function OnExit()
    con:close()
    env:close()
end    

function ChatArrival(tUser, sData)
  con:execute(("INSERT INTO `MsgTop` (`Nick`) VALUES ('%s')"):format(tUser.sNick))
  con:execute(("UPDATE `MsgTop` SET `Msg` = `Msg` + 1 WHERE `Nick` = '%s'"):format(tUser.sNick))
end
Go to the top of the page
+Quote Post
Wariner
сообщение 21.3.2009, 11:25
Сообщение #55


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Для чего нужен id? И ещё что нужно выделять апострофами а что нет? В доках по MySQL ничего конкретного вроде не нашёл....

upd: прошу ещё раз посмотреть всё ли норм написано))))) Есмли да то начну переделку некоторых своих скриптов))))
Прикрепленные файлы
Прикрепленный файл  MsgTopMySQL.lua ( 1.69 килобайт ) Кол-во скачиваний: 3
 
Go to the top of the page
+Quote Post
Setuper
сообщение 21.3.2009, 12:34
Сообщение #56


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

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




id - это индексированное поле. Служит для наискорейшего выполнения запросов.

Апострофами выделяются имена полей, таблиц, баз данных и тд. Выделять апострофами не обязательно, если имя уникально (не используется в синтаксисе sql), однако хорошие программисты, дабы не отвлекаться на эту мелочь, всегда выделяют все имена апострофами. Приведу пример:
Код
assert(con:execute"CREATE TABLE IF NOT EXISTS TABLE(`field` INT)")
в данном случае запрос не выполнится и будет выдана ошибка, всё из-за того, что имя таблицы - TABLE, является ключевым словом sql. Однако если написать так:
Код
assert(con:execute"CREATE TABLE IF NOT EXISTS `TABLE`(`field` INT)")
то запрос выполнится. Поэтому чтобы не отвлекаться и не проверять на совпадение с ключевыми словами, имена всех придуманных объектов заключаем в апострофы.

По поводу скрипта:
1) Не закрыт курсор!!!!!
2) Ограничение можно делать в самом sql, используя LIMIT.

Прикрепленный файл  MsgTopMySQL.lua ( 1.64 килобайт ) Кол-во скачиваний: 2


Спасибо сказали:
Go to the top of the page
+Quote Post
Wariner
сообщение 22.3.2009, 0:10
Сообщение #57


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Класс))))))))) вот токо я до сих пор не придумал таблицы((((

upd: как правильно сделать связь таблиц, где почитать? какой оператор?
Go to the top of the page
+Quote Post
Setuper
сообщение 22.3.2009, 0:14
Сообщение #58


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

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




Ни в sqlite, ни в mysql нет полнеценной поддержки связей. Связи являются визуальными, но тем не менее они должны быть.
Go to the top of the page
+Quote Post
Wariner
сообщение 22.3.2009, 0:21
Сообщение #59


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




ну а если поконкретнее немного? что должна содержать 3 таблица(которая для связи)?
Go to the top of the page
+Quote Post
Setuper
сообщение 22.3.2009, 0:42
Сообщение #60


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

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




Смотря какой тип связи.

2 таблицы со связью многие-ко-многим связываются через третью таблицу.
в третьей таблице находятся ссылка на ключи из двух других
Go to the top of the page
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Ответить в данную темуНачать новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

Collapse

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

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts ВАЖНО: Topic has attachmentsВопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
1 049 Wariner 988 185 3.2.2019, 12:51 Посл. сообщение: MIKHAIL
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 45 194 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 320 402 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 317 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 29 592 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 353 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 784 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 7 283 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 25 906 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 268 113 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 50 736 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 096 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 9 018 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 41 233 26.12.2011, 15:04 Посл. сообщение: Ksan
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 444 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 23.11.2024, 5:59