Trong MySQL, tôi có thể sử dụng hàm RAND(), có cách nào khác trong SQLite 3 không?SQLite - ORDER BY RAND()
Trả lời
sử dụng random():
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
EDIT (bởi QoP): Từ các tài liệu trên SQLite Autoincrement cột ed khẳng định rằng:
Các thuật toán lựa chọn bình thường ROWID mô tả ở trên sẽ tạo đơn điệu tăng ROWIDs độc đáo miễn là bạn không bao giờ sử dụng giá trị ROWID tối đa và bạn không bao giờ xóa các entry trong bảng với các ROWID lớn nhất. Nếu bạn từng xóa hàng, thì ROWID từ hàng đã xóa trước đây có thể được sử dụng lại khi tạo hàng mới.
Ở trên chỉ đúng nếu bạn không có cột INTEGER PRIMARY KEY AUTOINCREMENT
(nó vẫn hoạt động tốt với các cột INTEGER PRIMARY KEY
). Dù sao, điều này nên được nhiều di động/đáng tin cậy:
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;
ROWID
, _ROWID_
và OID
đều bí danh cho SQLite id hàng nội bộ.
+1 , Đây là cách nhanh hơn so với các tùy chọn khác với điều kiện id là chỉ mục. –
Có giải pháp này nhanh hơn, nhưng giả định id bắt đầu từ 1 và không có khoảng trống. Nếu không, các hàng theo sau khoảng cách "ngẫu nhiên" được chọn thường xuyên hơn các hàng khác. –
@Bill, cảm ơn vì đã chỉ ra vấn đề trên câu trả lời của tôi – dfa
quyết:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Tôi không đồng ý. Hiện tại chúng tôi có hai bit thông tin, cách chọn ngẫu nhiên một bản ghi, cách liệt kê tất cả các bản ghi một cách ngẫu nhiên. Tôi chưa bao giờ cần phải làm một trong hai, nhưng nếu tôi làm, bây giờ tôi biết làm thế nào. Tôi cũng biết rằng MySQL thực hiện nó khác với SQLlite. Một câu hỏi siêu kỹ thuật sẽ ấn tượng hơn, nhưng ít hữu ích hơn. –
Suy nghĩ đầu tiên của tôi là không có bất kỳ chức năng nào để sắp xếp các kết quả một cách ngẫu nhiên, hoặc nếu có một tính năng/chức năng như vậy thì sẽ càng mơ hồ hơn - đó là điều xảy ra với trình kích hoạt SQLite chẳng hạn. –
Tôi đã bỏ phiếu này vì anh ấy đã trả lời trước. –
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Và đối với hồ sơ giới hạn không phải là 1 nếu bạn muốn đặt hàng toàn bộ bảng ngẫu nhiên và truy cập tất cả các hàng theo thứ tự ngẫu nhiên đó. – lemontwist
Điều này cũng sẽ hoạt động nếu bạn có một mệnh đề WHERE phức tạp và muốn một hàng ngẫu nhiên từ danh sách được lọc đó. Câu trả lời được chấp nhận không hỗ trợ dễ dàng. –
Và One Khác không có hàng trùng lặp được trả về trong Kết quả, Đây là những gì tôi cần (y) –
Đối với việc sử dụng hiệu suất tốt hơn này trong SQLite:
SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x)
này cũng được áp dụng cho MySQL. Điều này chạy nhanh hơn vì các công cụ SQL tải các trường hàng đầu tiên vào bộ nhớ rồi sắp xếp chúng, ở đây chúng tôi chỉ tải và sắp xếp ngẫu nhiên trường id của hàng, sau đó chúng tôi nhận được X của chúng và tìm toàn bộ các hàng của các id X này theo mặc định được lập chỉ mục.
- 1. R Shiny: Side by Side Checkbox
- 2. Nhập khẩu FIles với phần mở rộng .sqlite vào R
- 3. ORDER BY trên các cột khác nhau theo các hướng khác nhau trong SQLite
- 4. Sử dụng mệnh đề ORDER BY bên trong hàm GROUP_CONCAT trong SQLite
- 5. Chuyển đổi giấy chứng nhận .pem nào để .der/cer
- 6. Chuyển khóa công cộng RSA thành RSA DER
- 7. Giải mã một ASN.1 DER OCTET STRING với OpenSSL
- 8. CHỌN "đầu tiên" (được xác định bởi ORDER BY) hàng TỪ các hàng gần trùng lặp (được xác định bởi GROUP BY, HAVING, COUNT) trong SQLite
- 9. chuyển đổi đầu ra của lệnh "by" của R thành khung dữ liệu
- 10. android: ORDER BY trong truy vấn
- 11. Cách kết hợp GROUP BY, ORDER BY và HAVING
- 12. Nhóm SQLITE theo số
- 13. CakePHP và GROUP BY
- 14. GROUP BY with CursorLoader
- 15. SQLAlchemy ORDER BY FIELD()
- 16. MySQL ORDER BY COUNT()?
- 17. backtrace by SIGSEGV
- 18. XSLT 1.0 Nhóm By
- 19. SQLAlchemy ORDER BY DESCENDING?
- 20. GROUP_CONCAT ORDER BY
- 21. GROUP BY trong MATLAB
- 22. Javascript Nhóm By Mảng
- 23. Chia Chuỗi By Character
- 24. Objectify Filter by Ref
- 25. Ngoại lệ SQLite: Bận SQLite
- 26. lỗi cần tây 'Connection reset by peer'
- 27. Seeding SQLite RANDOM()
- 28. Làm thế nào để chúng ta chuyển đổi một chuỗi từ PEM để der định dạng
- 29. mã hóa C#, có tệp .der và .pem làm đầu vào
- 30. Trích xuất khóa công khai từ chứng chỉ ở định dạng DER
Câu hỏi liên quan: http://stackoverflow.com/questions/2171578/seeding-sqlite-random –