Php 从数据库表中选择random user并存储在另一个表中

Php 从数据库表中选择random user并存储在另一个表中,php,mysql,Php,Mysql,如果它选择的随机用户已经在winners表中,我需要以下代码来循环并选择另一个随机用户 下面的代码可以工作,但是如果它随机选择一个已经在winners表中的用户,它不会重试。我尝试了几种不同的方法,但没有找到一种有效的解决方案 提前谢谢。 (这是我关于stackoverflow的第一个问题,如果我没有遵守任何协议,请对我宽容一些) 您可以更改第一个查询以排除其他表中不存在的用户 应该是这样的 SELECT userid, firstname, surname, email FROM users

如果它选择的随机用户已经在winners表中,我需要以下代码来循环并选择另一个随机用户

下面的代码可以工作,但是如果它随机选择一个已经在winners表中的用户,它不会重试。我尝试了几种不同的方法,但没有找到一种有效的解决方案

提前谢谢。 (这是我关于stackoverflow的第一个问题,如果我没有遵守任何协议,请对我宽容一些)


您可以更改第一个查询以排除其他表中不存在的用户

应该是这样的

SELECT userid, firstname, surname, email FROM users WHERE NOT EXISTS (SELECT * FROM winners
                WHERE users.userid = winners.userid) ORDER BY RAND() LIMIT 1;

此外,由于限制1,您的代码只有一个循环,因此无法正常工作。您可以将
$sqlCommand
替换为以下内容,使用子查询排除现有的赢家,而不是循环,直到成功:

$sqlCommand = "SELECT userid, firstname, surname, email ".
              "FROM users ".
              "WHERE userid NOT IN (SELECT userid FROM winners) ".
              "ORDER BY RAND() LIMIT 1"; 

您可以在一个查询中执行此操作:

INSERT INTO winners 
    SELECT userid, firstname, surname, email 
    FROM users 
    WHERE userid NOT IN (SELECT userid FROM winners) 
    ORDER BY RAND() 
    LIMIT 1

。它们不再得到维护。看到了吗?相反,学习,并使用,或-将帮助您决定哪一个。如果选择PDO,.

如果需要循环,请将“$sqlCommand”语句中的代码片段放到另一个循环中while循环的末尾

有必要有两张桌子吗?如果没有,您可以只添加一个字段(例如haswen)并仅选择那些行,其中haswen为false。从hasWon=false且id=[…]的用户中选择[…]
INSERT INTO winners 
    SELECT userid, firstname, surname, email 
    FROM users 
    WHERE userid NOT IN (SELECT userid FROM winners) 
    ORDER BY RAND() 
    LIMIT 1