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