Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi cú pháp với hàm Rand () trong MySQL trong Delphi

Trước hết, bạn không sử dụng RAND() một cách chính xác. Nó trả về một số thập phân 0 <= N < 1 . Giá trị đầu vào là một hạt giống, không phải là một giới hạn trên như bạn đang mong đợi. Để nhận một số nguyên ngẫu nhiên giữa 0 <= N < Count , bạn phải cộng nhiều kết quả, tức là RAND()*Count , mà bạn không làm. Nhưng bạn không cần phải làm điều đó, bạn chỉ có thể sử dụng RAND() tự nó, không cần phải truy vấn số lượng bản ghi trước:

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

Nếu không, bạn có thể chọn một bản ghi ngẫu nhiên bằng cách chỉ định độ lệch cho LIMIT mệnh đề, ví dụ:

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

Nếu bảng của bạn có trường id tăng tự động không có khoảng trống trong đó, bạn có thể sử dụng các kỹ thuật khác để sử dụng RAND() với. Xem MySQL Chọn bản ghi ngẫu nhiên để làm ví dụ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql nhận tổng của một cột trong mỗi hàng của cột mới

  2. Có cách nào để tạo UUID dựa trên thời gian / nút trở về trước trong PHP không?

  3. Nhiều-nhiều trên cùng một bảng

  4. Định dạng này là gì?

  5. php echo không hoạt động