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

时间:2012-03-12 07:05:52

标签: php mysql

选择此项的最有效方法是什么,然后立即删除它。

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

我怎样才能使用相同的选择查询,还能以最有效的方式删除它所选择的内容?

4 个答案:

答案 0 :(得分:1)

$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);

使用mysql,你必须做一个然后另一个。您将使用选择结果中的键然后直接删除该记录。在此示例中,我假设您的主键列名为“id”。您可以使用当前用于访问数据库的任何方法替换myssql函数。

答案 1 :(得分:0)

你可以做这个嵌套查询

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

感谢

答案 2 :(得分:0)

答案 3 :(得分:0)

我知道这个例子混合使用常规语句准备好的语句。但这取决于开发人员如何编写代码。这只是一个概念证明,易于阅读。

$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();