How about using ORDER BY RAND() LIMIT 1;
in your query instead of where _id IN (select FLOOR(1+(RAND()*(COUNT(_id)-1))) from user);
You get multiple rows cause (select FLOOR(1+(RAND()*(COUNT(_id)-1))) from user) will return you a different value for ever record in 'user' table. That is because of the RAND bit.
Run select FLOOR(1+(RAND()*(COUNT(_id)-1))) from user
on its own and you will see.