No edit summary |
No edit summary |
||
(18 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
return string.format("<code>tableName</code> parameter is required") | return string.format("<code>tableName</code> parameter is required") | ||
end | end | ||
local countFields = 'COUNT(*)=total' | local countFields = 'COUNT(*)=total' | ||
local countArgs = {} | local countArgs = { | ||
format = 'list', | |||
limit = 1 | |||
} | |||
local countResults = cargo.query(tableName, countFields, countArgs) | local countResults = cargo.query(tableName, countFields, countArgs) | ||
local total = countResults.total | local total = 0 | ||
for r = 1, #countResults do | |||
local result = countResults[r] | |||
total = result.total | |||
end | |||
if total == nil or total == "" then | |||
return string.format("<code>total</code> could not be calculated from table %s", tableName) | |||
end | |||
local number = require('Module:Random').number | |||
local queryFields = 'game=game,link=link' | |||
local randomArgs = { | |||
[1] = 1, | |||
[2] = total | |||
} | |||
local countOffset = number(randomArgs) | |||
if countOffset >= 1 then | |||
countOffset = countOffset - 1 | |||
end | |||
local args = { | local args = { | ||
format = table | format = 'table', | ||
limit = 1, | limit = 1, | ||
offset = countOffset | offset = countOffset | ||
} | } | ||
local | |||
local results = cargo.query(tableName, queryFields, args) | |||
for r = 1, #results do | for r = 1, #results do | ||
local result = results[r] | local result = results[r] | ||
return string.format(" | return string.format("[[%s]]", result.link) | ||
end | end | ||
end | end | ||
return p | return p |
Latest revision as of 07:51, 27 December 2023
Documentation for this module may be created at Module:RandomCargoRecord/doc
local p = {} local cargo = mw.ext.cargo function p.randomCargoRecord(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame); local tableName = args[1] if tableName == nil or tableName == "" then hasErrors = true return string.format("<code>tableName</code> parameter is required") end local countFields = 'COUNT(*)=total' local countArgs = { format = 'list', limit = 1 } local countResults = cargo.query(tableName, countFields, countArgs) local total = 0 for r = 1, #countResults do local result = countResults[r] total = result.total end if total == nil or total == "" then return string.format("<code>total</code> could not be calculated from table %s", tableName) end local number = require('Module:Random').number local queryFields = 'game=game,link=link' local randomArgs = { [1] = 1, [2] = total } local countOffset = number(randomArgs) if countOffset >= 1 then countOffset = countOffset - 1 end local args = { format = 'table', limit = 1, offset = countOffset } local results = cargo.query(tableName, queryFields, args) for r = 1, #results do local result = results[r] return string.format("[[%s]]", result.link) end end return p