これをSELECTしてすぐに削除するのが最も効率的な方法は何でしょうか。最も効率的な方法はSELECTを選択し、すぐにこれを削除する
SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;
この同じ選択クエリをどのようにして、最も効率的に選択したものを削除することができますか?あなたは、このネストされたクエリのよう
これをSELECTしてすぐに削除するのが最も効率的な方法は何でしょうか。最も効率的な方法はSELECTを選択し、すぐにこれを削除する
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);
を、あなたは1、その後、他の操作を行う必要があります。選択結果のキーを使用して、その後にそのレコードを直接削除します。この例では、主キー列の名前が "id"であると仮定しています。 mysqql関数を、もちろんデータベースにアクセスするために使用しているメソッドに置き換えます。
は十分に単純です。それが私がやることです。しかし、私はそれを行う1つのクエリの方法や私が気づいていなかったかもしれないと思った。ありがとう! – brybam
私は彼が両方の結果を取得して削除することを選択したいと思うと思う。 – dqhendricks
使用は。DELETE FROM
DELETE
FROM SomeTable
WHERE EXISTS
(SELECT * from `usersOnline` WHERE timestamp>NOW()-INTERVAL 5 SECOND ORDER BY rand() LIMIT 1;
)
おかげで行うことができます
私は彼が両方の結果を取得して削除することを選択したいと思うと思う。 – dqhendricks
私はこの例では、通常のステートメントで準備されたステートメントが混在していることを知っています。しかし、コードを書く方法は開発者次第です。これは概念の証明に過ぎず、簡単に読むことができます。
$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 * 'を使うのでしょうか。 –
OPはユーザデータを使いたいと思うからです。このように、whileループの内部では、必要に応じて余分なコードを使用してデータを処理できます。 – Bradmage
関連:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=158486 –
それはあなたが同じテーブルからクエリの結果を削除したいですか? – Bradmage