【问题标题】:MySql random select and delete in the same queryMySql 在同一个查询中随机选择和删除
【发布时间】:2013-03-11 07:46:52
【问题描述】:

我有以下 mysql 查询:

SELECT u.name AS nume, p.premiu AS premiu
FROM fbusers AS u, premii AS p
ORDER BY RAND( ) 
LIMIT 1

我想要随机选择一个用户来提供奖品,然后我想从奖品表中删除该奖品。
可以在同一个查询中执行此操作吗?我应该如何进行?

编辑:逻辑是显示获胜者和奖品,如果可能,将结果插入其他表格,然后从表格中删除奖品,因为其他人不可能赢得相同的奖品。

【问题讨论】:

  • 如果这两个查询在逻辑上总是在一起,你可以把它们包装在一个存储过程中。
  • 奖品也是随机的,还是您按规定的顺序分配(给随机用户)?
  • 奖品也是随机的,我将所有奖品放在一张桌子上,这将是一个随机选择(用户和奖品)。
  • 我还会考虑进行“软”删除,以便您保留奖品信息以进行统计报告。软删除只是一个带有一个字符的状态列;通常是 A、I 或 D(活动、非活动或已删除)。然后,您可以在表格中查询过去或现在的任何奖品,无论谁中奖。

标签: mysql sql database


【解决方案1】:

不:您不能在一个查询中执行 SELECT、INSERT 和 DELETE。如果您希望原子地处理所有这三个操作(即它们都将被执行,或者如果任何一个失败,其他的将被回滚),请使用事务

【讨论】:

    【解决方案2】:

    当然可以,但我看不到这里的逻辑,因为没有关于谁赢了的信息:

    DELETE price FROM price 
        JOIN (SELECT u.name AS nume, p.premiu AS premiu
        FROM fbusers AS u, premii AS p
        ORDER BY RAND( ) 
        LIMIT 1) a
    ON price.premiu = a.premiu
    

    【讨论】:

    • 谢谢,是我的错,我没有解释清楚。逻辑是显示获胜者和奖品,如果可能,将结果插入其他表格,然后从表格中删除奖品,因为其他人不可能赢得相同的奖品。
    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 2014-03-25
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多