Reputation: 924
I am working on a MCQ module and I need to fetch random questions from my database. The problem is that I seem to get duplicates.
Upvotes: 0
Views: 3633
Reputation: 58371
If you have a very large number of rows you can add a column to the table which stores a number between 0 and 1 and then fetch with a query:
SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20
This means that your database doesn't have to randomly order the entire table to provide just 20 rows.
Upvotes: 0
Reputation: 134631
If you're fetching them from database, use SQL to do your job. e.g. fetching 20 random questions (without repeating):
SELECT * FROM questions ORDER BY RAND() LIMIT 20
Upvotes: 6
Reputation: 70001
Without any more info i can suggest a rudimentary solution. (but please update your question with more info)
I'm guessing you have users, because then you could save into a table (be it temporary or not), what questions said user has already gotten.
If you don't have users, you can use the SESSION_ID
as a user identifier for that user.
So when you fetch a question for the first time, and the user answers it, it saves the info you need to save, and then the user's id and the question's id into a table.
When fetching the next question, you do a check to see if the user has that question id in this new table.
Upvotes: 0
Reputation: 37668
See Do stateless random number generators exist?
Any sequence of pseudo-random numbers will eventually repeat. How you obtain your pseudo-random numbers?
Upvotes: 0
Reputation: 75724
If you're using MySql and you have reasonable small amount of data, you can use ORDER BY RAND()
Upvotes: 1
Reputation: 30077
Sounds like you want to shuffle the questions, not randomize access to them. So your algorithm would be something like this.
for shuffling check out: Fisher-Yates shuffle algorithm
Upvotes: 6