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
use DELETE FROM: http://dev.mysql.com/doc/refman/5.0/en/delete.html
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();