什麼是最有效的方式來選擇這個,然後立即刪除它。什麼是最有效的方式來選擇,然後立即刪除這
SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;
我怎麼能採取這個相同的選擇查詢,但也使它刪除它以最有效的方式選擇?
什麼是最有效的方式來選擇這個,然後立即刪除它。什麼是最有效的方式來選擇,然後立即刪除這
SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 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函數。
夠簡單。這就是我要做的。但我認爲可能只有一種查詢方式來做到這一點,或者我沒有意識到。謝謝! – brybam 2012-03-12 23:49:37
你可以做這樣的嵌套查詢
DELETE
FROM SomeTable
WHERE EXISTS
(SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;
)
感謝
我相信他希望既選擇以獲得結果以及刪除它們。 – dqhendricks 2012-03-12 07:13:17
使用DELETE FROM:http://dev.mysql.com/doc/refman/5.0/en/delete.html
我相信他希望既選擇以獲得結果以及刪除它們。 – dqhendricks 2012-03-12 07:18:20
我知道這個例子與常規語句混合準備好的語句。但是這取決於開發人員如何編寫代碼。這只是一個概念證明,保持簡單易讀。
$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();
如果'id'是唯一必填字段,爲什麼要使用'select *' – 2012-03-12 07:36:50
因爲看起來OP想要使用用戶數據。這樣,在while循環內部,可以根據需要使用額外的代碼來處理數據。 – Bradmage 2012-03-12 07:39:25
相關:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=158486 – 2012-03-12 07:10:21
難道你想從同一個表中刪除查詢的結果? – Bradmage 2012-03-12 07:10:51