2012-03-12 62 views
1

什麼是最有效的方式來選擇這個,然後立即刪除它。什麼是最有效的方式來選擇,然後立即刪除這

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

我怎麼能採取這個相同的選擇查詢,但也使它刪除它以最有效的方式選擇?

+0

相關:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=158486 – 2012-03-12 07:10:21

+0

難道你想從同一個表中刪除查詢的結果? – Bradmage 2012-03-12 07:10:51

回答

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函數。

+0

夠簡單。這就是我要做的。但我認爲可能只有一種查詢方式來做到這一點,或者我沒有意識到。謝謝! – brybam 2012-03-12 23:49:37

0

你可以做這樣的嵌套查詢

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

感謝

+0

我相信他希望既選擇以獲得結果以及刪除它們。 – dqhendricks 2012-03-12 07:13:17

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(); 
+0

如果'id'是唯一必填字段,爲什麼要使用'select *' – 2012-03-12 07:36:50

+0

因爲看起來OP想要使用用戶數據。這樣,在while循環內部,可以根據需要使用額外的代碼來處理數據。 – Bradmage 2012-03-12 07:39:25

相關問題