在子查询后删除并返回结果

时间:2014-02-26 15:10:24

标签: php mysql sql

现在我有以下我在PHP中调用的SQL语句:

SELECT * FROM activity WHERE id=(
    SELECT activity_id FROM session_notifications
    WHERE session_id='{$session}');

这将从session_notification表中引用的活动中提取表数据。都好。现在,有没有一种简单的方法可以做到这一点,但是在同一个语句中删除通过检查session_notifications返回的所有行?

**编辑:为了更清楚,我不想删除活动,因为我需要这些信息。我想删除遇到的session_notifications中的行。为什么?因为我之后不希望添加任何东西。但是,我可能没问题,因为SQL表是线程安全的,是吗?

2 个答案:

答案 0 :(得分:1)

使用一个原子语句无法做到这一点。改为使用交易:

BEGIN;
SELECT …;
DELETE …;
COMMIT;

建议BTW使用prepared statements,而不是像WHERE session_id='{$session}'那样引入SQL注入。

答案 1 :(得分:1)

如果您想确保删除select中显示的记录,则必须使用交易。

START TRANSACTION;
SELECT * FROM activity WHERE id IN (
    SELECT activity_id FROM session_notifications
    WHERE session_id='{$session}');
DELETE FROM activity WHERE id IN (
    SELECT activity_id FROM session_notifications
    WHERE session_id='{$session}');
COMMIT;