Portal SAMP
[Ajuda] Mysql!!! - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Mysql!!! (/showthread.php?tid=3498)



Mysql!!! - agi.exe - 03/04/2023

Código PHP:
mysql_query(ConexaoSQL"CREATE TABLE IF NOT EXISTS `Houses` (`id` int not null AUTO_INCREMENT,  PRIMARY KEY(id));"false); 

Quando deleto uma coluna já criada da tabela Houses, e depois crio uma outra coluna o primary key(id) não pega o lugar da coluna q foi deletada! 

EX: Deleto a caluna com primary key(id) 1 e depois crio uma outra coluna o primary keyid) não será 1 (será pulado) enquanto que a coluna que tinha primary key (id) 1 já não existe


Isso tem solução?


RE: Mysql!!! - MarcosBrazz - 03/04/2023

Não tem solução, é do própio MySQL


RE: Mysql!!! - João Pedro Alves - 03/04/2023

Você precisa entender o conceiito de chave primária. Uma chave primária é uma identificação UNICA e IRREPETÌVEL para um conjunto de dados.

Se por algum motivo você que resse tipo de comportamento que você drescreveu então não use chave primaria nesse campo pois não faria sentido. Use outro campo como um itndeificador secundário e crie uma lógica manual para preencher o valor da maneira que você quer.

Uma dica: meus anos de experiência em programação me dizem que tem uma enorme chance de você ter aquitetado seu sistema de maneira não tão legal porque esse comportamento que você precisa é muito atípico...


RE: Mysql!!! - Maycon_Felipe - 03/04/2023

Bom eu utilizava dessa forma a baixo sempre quando iniciava o servidor antes de qualquer coisa, etc..

Código:
mysql_query(coloca aqui seu BD, "SET @count = 0");
mysql_query(coloca aqui seu BD, "UPDATE contas SET id = @count:= @count + 1");

Mas há um problema ai.. se vc for verificar o dono da casa pelo ID dela, você vai ter conflito..
Uma forma é verificar todas as casas e setar o ID dela para o player, obviamente salvando o Nome dele na tabela da casa..

Se não for utilizar o ID para nenhuma outra coisa, acho válido utilizar, e sempre utilizar quando o servidor inicia, fora isso você continuará a ter conflitos, pois terá q carregar tudo de novo para alocar nas variáveis certas.


RE: Mysql!!! - João Pedro Alves - 04/04/2023

(03/04/2023 22:28)Maycon_Felipe Escreveu: Bom eu utilizava dessa forma a baixo sempre quando iniciava o servidor antes de qualquer coisa, etc..

Código:
mysql_query(coloca aqui seu BD, "SET @count = 0");
mysql_query(coloca aqui seu BD, "UPDATE contas SET id = @count:= @count + 1");

Mas há um problema ai.. se vc for verificar o dono da casa pelo ID dela, você vai ter conflito..
Uma forma é verificar todas as casas e setar o ID dela para o player, obviamente salvando o Nome dele na tabela da casa..

Se não for utilizar o ID para nenhuma outra coisa, acho válido utilizar, e sempre utilizar quando o servidor inicia, fora isso você continuará a ter conflitos, pois terá q carregar tudo de novo para alocar nas variáveis certas.

[Imagem: default.jpg]


RE: Mysql!!! - c0mbaT_ - 06/04/2023

Bom dia, sua resposta tem uma solução sim!

Você terá que criar um loop para verificar no seu banco de dados onde a próxima "Primary Key" está vazia no caso com valor "0", veja um exemplo:

Código:
#define MAX_HOUSES 250

new string[128], Cache:Query, IsNull;

for(new i = 1; i < MAX_HOUSES; i++)
{
    mysql_format(BancoDados, string, sizeof(string), "SELECT * FROM Houses WHERE HouseID = '%i';", i); // Aqui selecionará cada Primary Key de acordo com o Loop.
    Query = mysql_query(BancoDados, string, true); // Aqui usará o comando e salvará o Cache.
    cache_get_value_int(0, "HouseID", IsNull); // Pegará o valor da Primary Key e guardará na variável IsNull.
    cache_delete(Query); // Deleta o valor do Cache caso precise fazer uma nova verificação.
    if(IsNull == 0) // Verifica se o valor da variável IsNull (Primary Key) é 0
    {
      mysql_format(BancoDados, string, sizeof(string), "INSERT INTO Houses values (%i, valores [...])'", i); // Insere na tabela 'Houses' na Primary Key encontrada vazia 'i'.
      mysql_query(BancoDados, string, false);
      return 1;
    }
    IsNull = 0;
}

A variável 'IsNull' guardará o valor de cada chave primária de acordo com o Loop feito, assim que identificar que o valor da chave primária é 0, ela entrará na condicional "IF".
Quando for utilizar o mysql_format, coloque no valor da chave primeira o valor da variável do  Loop "i" de acordo como está no código.

Espero ter ajudado  Smile


RE: Mysql!!! - Vel - 06/04/2023

Isso não é de forma alguma considerado um problema, não deveria ter solução e muito menos precisar de solução...