Mysql
 sql >> Database >  >> RDS >> Mysql

Errore di sintassi con la funzione Rand() in MySQL in Delphi

Prima di tutto, non stai usando RAND() correttamente. Restituisce un numero decimale 0 <= N < 1 . Il valore di input è un seme, non un limite superiore come ti aspetti. Per ottenere un numero intero casuale compreso tra 0 <= N < Count , devi moltiplicare il risultato, cioè RAND()*Count , cosa che non stai facendo. Ma non è necessario farlo, puoi semplicemente usare RAND() di per sé, non è necessario eseguire prima una query sul conteggio dei record:

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

Altrimenti, puoi selezionare un record casuale specificando un offset al LIMIT clausola, ad esempio:

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 la tua tabella ha un campo ID a incremento automatico senza spazi vuoti, ci sono altre tecniche che puoi usare RAND() insieme a. Vedi MySQL Select Random Records per esempi.