Хранение случайно выбранных строк в сеансе?
Привет! * * 1003
Я создаю скрипт PHP, который выводит случайное слово из таблицы MySQL. Каждый раз, когда скрипт обновляется, я хочу отображать новое слово. (Это связано с jquery - поэтому вывод данных из php-файла напрямую отображается на моей странице)
Однако я хочу отобразить каждое слово только один раз. Если все слова выбраны, я хочу, чтобы скрипт перезагружался и начинал снова.
Прямо сейчас я сделал это, настроив дополнительную таблицу с именем «посещенные» и поместив туда все выбранные строки из таблицы «список слов» с уникальным идентификатором сессии пользователя
не допускать, чтобы результаты нескольких пользователей мешали друг другу.
Итак, запрос выглядит так:
session_start();
$id = session_id();
$random_sql = "SELECT *
FROM wordlist AS a
LEFT JOIN visited AS b ON a.word = b.word
AND b.sessionid = '$id'
WHERE b.word IS NULL
ORDER BY a.weight * rand( ) DESC // Weighted random
LIMIT 1";
$random_row = mysql_query($random_sql);
if(mysql_num_rows($random_row) > 0)
{
while($row = mysql_fetch_row($random_row))
{
$insert_query = "INSERT INTO visited (ID, word, sessionid, date) VALUES ('$row[0]', '$row[1]', '$id', CURDATE())";
$insert = mysql_query($insert_query) or die (mysql_error());
echo $row[1];
}
Это прекрасно работает, но я считаю, что для базы данных будет сложно обрабатывать много посетителей одновременно?
Итак, мой вопрос:
Как сохранить информацию о «посещенных» словах в сеансе и исключить их из запроса?
Еще одна вещь: я предполагаю, что таблица словаря будет иметь около 8000 строк. Будет ли это слишком много для функции ORDER BY RAND, и рендеринг будет заметно медленным?
Спасибо!