Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

arthurluna

Limite de produto = 1

Recommended Posts

Olá!

 

Alguém pode ajudar a terminar meu MYSQL.

 

Função:

 

Quero que o MYSQL delete todos os items em minha database com mesmo serial, sendo que sobre somente 1, mesmo tendo 2 ou mais items iguais tem se sobre um independentemente da quantidade de items com o mesmo serial...

 

Está a função:

 

("DELETE FROM " .. tablesToCheck .. " WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") = " .. db.escapeString(query:getDataString("track")) .. ";")

 

 

o Resto do script está pronto, o único problema é na hora do DELETE FROM que está deletando todos os items e não deixa 1...

 

Ajudem por favor, sou novo nesse fórum !!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Syntax

DELETE FROM table_name
WHERE some_column = some_value

 

 

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");

mysqli_close($con);
?>
DELETE FROM tabela WHERE serial = 'serial'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, é mesmo não escrevi a condição, desculpe

 

Seta a variavel $numero_row para o valor Quantidade de linha que tenha o valor para ser deletado, e depois usa o comando delete quando tiver a condição de mais de uma linha.

 

 

if ($numero_row>1) {

COMANDO MYSQL DELETE

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

MEU script é em LUA ;x é complicado entender o que você quer dizer até pq n entendendo nada de mysql...

 

 

quero que a condição apos deletar os items seja 1, quero dizer que pode ter 100 items iguais de mesmo serial, quando a query rodar tem que deletar 99 items deixando apenas 1 item na table.

 

local delete = db.executeQuery("DELETE FROM " .. tablesToCheck .. " WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") = " .. db.escapeString(query:getDataString("track")) .. ";")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta dessa forma:

DELETE FROM
( SELECT x.*, @apagar:= ( x.serial = @serial_anterior, 1, 0 ) as apagar, @serial_anterior:= x.serial
(
SELECT t.id, t.serial
FROM tabela t
ORDER BY t.serial ASC, t.id ASC
) as x
) as ficticia
WHERE ficticia.apagar = 1

Serve só como exemplo, terá de fazer as alterações necessárias...

 

Primeiro uma consulta para verificar o id (PRIMARY KEY ou UNIQUE, pois não haverão registros duplicados, e precisamos manter 1 registro) e o serial, nomeei essa consulta como 'x'.

(
SELECT t.id, t.serial
FROM tabela t
ORDER BY t.serial ASC, t.id ASC
) as x

Depois, fiz uso de variáveis dentro do MySQL, verifico cada registro retornado de x (x.*), a variável @apagar verifica se o x.serial atual é igual ao @serial_anterior (que foi colocado depois do @apagar, senão da erro), e aí o @serial_anterior recebe o serial atual, a variavel @apagar, recebe valor de 0 caso seja diferente do serial anterior, e 1 caso sejam iguais, o resultado dessa query eu nomeei como 'ficticia':

( SELECT x.*, @apagar:= ( x.serial = @serial_anterior, 1, 0 ) as apagar, @serial_anterior:= x.serial
( ... [resumindo]... ) as x
) as ficticia

Por fim, aplico o DELETE nos ids da query 'ficticia' onde apagar = 1:

DELETE FROM
( ... [resumindo] ... ) as ficticia
WHERE ficticia.apagar = 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é muito complexo pra mim que entendo quase nada de banco de dados, Olha o Script em LUA que fiz, mais usei uma base para faze-lo:

 

Se poderem aditar pra mim agradeço dando reputação!

local function Antidupe()
-- USAR FROM 62 OU 70 ELE VAI PEGAR APARTIR DO 62 ou 70 CARACTERS
local tablesToCheck = {"player_items", "player_depotitems", "tile_items"}
local itemsToCheck = {2523}
local text, final = "", ""
local filex = "data/logs/Duplicated.txt"
local f = io.open(filex, "a+")
local count = 0
local Caracters = 70
for i = 1, table.maxn(tablesToCheck) do
for _, item in ipairs(itemsToCheck) do
if(type(tablesToCheck[i]) == "string") then
local query = db.getResult("SELECT *, SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") AS 'track' FROM " .. tablesToCheck[i] .. " WHERE itemtype = "..item.." AND SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") IN (SELECT SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") FROM " .. tablesToCheck[i] .. " WHERE CONVERT(attributes USING latin1) LIKE '%serial%' GROUP BY SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") HAVING COUNT(*) > 1)")
if(query:getID() < 1) then
print("[!] [Anti-Dupe] -> No duplicated item was found in the database!")
end
if(query:getID() ~= -1) then
while(true) do
local delete = db.executeQuery("DELETE FROM " .. tablesToCheck[i] .. " WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM "..Caracters..") = " .. db.escapeString(query:getDataString("track")) .. ";")
text = "[!] [Anti-Dupe] -> Deleting item with duplicated serial from '" .. tablesToCheck[i] .. "' [Player: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. ", Item: " .. query:getDataInt("itemtype") .. ", Count: " .. query:getDataInt("count") .. ", Serial: " .. query:getDataString("track") .."]... " .. (delete and "Success!" or "Failed!")
count = (delete and count + 1 or count)
final = final .. (final ~= "" and "\n" or "") .. text
print(text)
if not query:next() then break end
end 
end
end
end
end
if(f ~= nil) then
f:write("[" .. os.date("%d %B %Y Hora: %X") .. "] >> [Anti-Dupe] " .. count .. " duplicated items have been deleted from the database.\n" .. (final == "" and "[!] [Anti-Dupe] -> No duplicated item was found in the database" or final) .. "\n\n")
f:close()
else
print("[!] [Anti-Dupe] -> Cannot save info to file!")
end
return true
end

function onSay(cid, words, param)
Antidupe()
return true
end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica a descrição da tabela em questão

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.