什么是最有效的SELECT方法,然后立即删除它

What would be the most efficient way to SELECT this, then DELETE it immediately.

SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;

How could I take this same select query, but also make it delete what it selected in the most efficient way?

$query = 'SELECT * FROM `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;';
$result = mysql_query($query);
$record = mysql_fetch_assoc($result);
$query = 'DELETE FROM `usersOnline` WHERE id = ' . $record['id'];
mysql_query($query);

with mysql, you would have to do one and then the other. you would use the key from the select result to then delete that record directly afterwards. in this example, i am assuming your primary key column is named "id". you would replace the myssql functions with whichever method you are using to access the database of course.

you can do like this nested query

DELETE  
FROM SomeTable  
WHERE EXISTS 
 (SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;
)

thanks

I know this example mixed prepared statments with regular statements. But it's up to the developer how to write the code. This is just a proof of concept, kept simple for easy reading.

$mysqli = new mysqli('localhost', 'user', 'password', 'userTable');

$result = $mysqli->query("SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1");

$stmt = $mysqli->prepare("DELETE FROM 'usersOnline WHERE id = ?");

while ($row = mysql_fetch_assoc($result)) {
    $stmt->bind_param('i', $row["id"]);
    $stmt->execute();
}
$stmt->close();

$mysqli->close();