sql >> Base de Datos >  >> RDS >> Mysql

Error de sintaxis con la función Rand() en MySQL en Delphi

En primer lugar, no está utilizando RAND() correctamente. Devuelve un número decimal 0 <= N < 1 . El valor de entrada es una semilla, no un límite superior como espera. Para obtener un número entero aleatorio entre 0 <= N < Count , tienes que multiplicar el resultado, es decir, RAND()*Count , que no estás haciendo. Pero no necesitas hacer eso, solo puedes usar RAND() por sí mismo, no hay necesidad de consultar primero el recuento de registros:

qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
qryCards.Open;
ShowMessage(qryCards.FieldByName('Card_Name').AsString);

De lo contrario, puede seleccionar un registro aleatorio especificando un desplazamiento al LIMIT cláusula, por ejemplo:

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);

Si su tabla tiene un campo de identificación de incremento automático sin espacios en blanco, hay otras técnicas que puede usar RAND() con. Consulte MySQL Seleccionar registros aleatorios para ejemplos.