Jump to content

Contar columnas sqlite


ende78ar

Recommended Posts

Hola gente como va?? empese a ver algo de Base de datos y para ello hice un pequeño script de "teletransportacion" donde mediante un comando guardo la posicion del jugador en una BD sqlite y se le asigna un nombre elegido por el usuario, el cual luego sera invocado mediate comando para transportarse a dicha hubicacion, asta ahi todo bien, lo que no pude conseguir despues de googlear bastante es el limitar la cantidad de puntos de "teletransportacion",  vi ejemplos similares con bucles for, tambien probe con COUNT FROM (TABLA) where campo_a_contar pero no le encuentro la vuelta y ya no se que mas probar. La tabla consta de 4 campos: nombre / x / y / z/  la idea es contar cuantas entradas hay en la columna nombre para crear un if y limitar las entradas a 5, algo que vi  mucho en el juego Rust. Si me pueden tirar alguna idea de como hacer el contador seria un golazo, gracias.

Link to comment

Puedes usar "table.size" Useful Function de la Wiki.

Aquí te dejo un ejemplo para que puedas guiarte, recuerda cambiar las variables. Saludos!

function table.size(tab)
    local length = 0
    for _ in pairs(tab) do length = length + 1 end
    return length
end

function teletransportes (player)
    local tabla = executeSQLQuery ("SELECT * FROM teletransportes WHERE nombre=?", getPlayerName(player)) -- Cambia el nombre de la tabla a la de tu DB
    local tRegistrados = table.size (tabla)

    if tabla then -- Comprueba si se ejecutó la consultaa
        if tRegistrados <= 5 then -- Si tiene 5 o menos teletransportes
            outputChatBox ("Tienes "..tRegistrados.." teletransportes registrados", player)
        else -- Si tiene más de 5
            outputChatBox ("Máximo de teletransportes.", player)
        end
    end
end
addCommandHandler ("tp", teletransportes)

 

Link to comment

Hola Merino buen dia gracias por responder, estube viendo lo del table.size pero solo lo pude hacer funcionar si hacia una tabla dentro del mismo codigo al querer conectar con la BD no le encontre la vuelta, pero al final lo solucione tomando algo de tu codigo y del que ya tenia en otra funcion, ahora solo me queda acomodar la funcion dentro del codigo anterior y meter el if. ?

db = dbConnect("sqlite", "posiciones.db")

function contando()
  local coor = dbQuery(db, "SELECT  nombre  FROM coordenadas") 
  local result = dbPoll(coor, -1)
  local length = 0
    for _ in pairs(result) do length = length + 1
  outputChatBox(length)  
end
end
addCommandHandler("contar", contando)

 

Link to comment
2 hours ago, ende78ar said:

Hola Merino buen dia gracias por responder, estube viendo lo del table.size pero solo lo pude hacer funcionar si hacia una tabla dentro del mismo codigo al querer conectar con la BD no le encontre la vuelta, pero al final lo solucione tomando algo de tu codigo y del que ya tenia en otra funcion, ahora solo me queda acomodar la funcion dentro del codigo anterior y meter el if. ?

db = dbConnect("sqlite", "posiciones.db")

function contando()
  local coor = dbQuery(db, "SELECT  nombre  FROM coordenadas") 
  local result = dbPoll(coor, -1)
  local length = 0
    for _ in pairs(result) do length = length + 1
  outputChatBox(length)  
end
end
addCommandHandler("contar", contando)

 

La sintaxis de la consulta está mal escrita. 

Intenta con este código:

db = dbConnect("sqlite", "posiciones.db");
function contando(j)
  local coor = dbQuery(db,"SELECT * FROM coordenadas");
  local result = dbPoll(coor,-1);
  outputChatBox(tostring(#result),j);
end
addCommandHandler("contar", contando);

 

Edited by _SAXI_
Link to comment
5 hours ago, _SAXI_ said:

La sintaxis de la consulta está mal escrita. 

Intenta con este código:

db = dbConnect("sqlite", "posiciones.db");
function contando(j)
  local coor = dbQuery(db,"SELECT * FROM coordenadas");
  local result = dbPoll(coor,-1);
  outputChatBox(tostring(#result),j);
end
addCommandHandler("contar", contando);

 

!!!Exelente!!!, ahora me devuelve la cantidad de registros, en mi caso 7,  como lo habia escrito yo el outputChatBox devolvia 1 2 3 4 5 6 7, segurumante por el bucle esto ultimo me va a servir para ver la lista de nombres de los puntos de "teletransporte".  Muchas Gracias.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...