Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de sintaxe com a função Rand () no MySQL no Delphi


Primeiro, você não está usando RAND() corretamente. Retorna um número decimal 0 <= N < 1 . O valor de entrada é uma semente, não um limite superior como você espera. Para obter um número inteiro aleatório entre 0 <= N < Count , você tem que multiplicar o resultado, ou seja, RAND()*Count , o que você não está fazendo. Mas você não precisa fazer isso, você pode apenas usar RAND() por si só, não há necessidade de consultar a contagem de registros primeiro:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);

Caso contrário, você pode selecionar um registro aleatório especificando um deslocamento para o LIMIT cláusula, por exemplo:
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic"';
qryCards.Open;
iCount := qryCards.RecordCount;
qryCards.Close;
qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" LIMIT ' + IntToStr(Random(iCount)) + ', 1');
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);

Se sua tabela tiver um campo de id de incremento automático sem lacunas, existem outras técnicas que você pode usar RAND() com. Veja MySQL Select Random Records por exemplo.