使用 INNER JOIN 时如何使 MySQL select 随机获胜

How to make MySQL select a random winner when using INNER JOIN

SELECT * FROM `surveys` INNER JOIN `surveyusers` ON `surveyusers`.`survID` = `surveys`.`survID` WHERE `surveyusers`.`hasWon` = 0 ORDER BY RAND();
UPDATE surveys SET winner = email;

这是一项学校作业,要求我们select并更新调查获胜者。

我使用 PHP 管理和显示调查,我希望 SQL 选出获胜者。 PHP 集 survID

我想随机选择一个获胜者并将调查 table 中的获胜者列设置为调查用户 table 中的电子邮件。但是我真的很苦恼。

更新可以采用与 Select.

相同的语法

您可以将这两个查询合二为一。

UPDATE `surveys` `s` SET `s`.`winner` = (
    SELECT email FROM `surveyusers`
    WHERE `surveyusers`.`hasWon` = 0
    AND `survID` = 1
    ORDER BY RAND()
    LIMIT 1
) WHERE `survID` = 1;

当然,您必须从 PHP 设置 survID。

您可以在 UPDATE 查询中嵌套 SELECT 查询:

UPDATE surveys SET winner = (
    SELECT `surveyusers`.email FROM `surveys` 
    INNER JOIN `surveyusers` ON `surveyusers`.`survID` = `surveys`.`survID` 
    WHERE `surveyusers`.`hasWon` = 0 ORDER BY RAND() LIMIT 1
) WHERE `survID` = xxx

其中 xxx 是要更新的调查。