Ваш запрос содержит несколько синтаксических ошибок.
Вы хотели что-то подобное?
SELECT username, message, ttime
FROM database.table1 as r1
INNER JOIN
(SELECT (RAND() * MAX(id)) as a_random_id
FROM database.table1) r2
ON (r1.id >= r2.a_random_id)
WHERE done = '1'
ORDER BY r1.id ASC
LIMIT 1
Интересно, быстрее ли этот вариант:
SELECT r.username, r.message, r.ttime
FROM database.table1 r
WHERE r.id = (
SELECT MIN(r1.id) <<-- this should make MySQL stop after the first hit.
FROM database.table1 r1
INNER JOIN
(SELECT (RAND() * MAX(id)) as a_random_id
FROM database.table1) AS r2
ON (r1.id >= r2.a_random_id)
WHERE r1.done = '1') sub
Да, и вы не выбираете из database
, вы выбираете из table
внутри базы данных.