如何在使用INNER JOIN时让MySQL选择随机获胜者

时间:2015-06-03 08:50:53

标签: php mysql join sql-order-by 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;

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

我使用PHP来管理和显示调查,我希望SQL选择胜利者。 PHP设置survID

我想挑选一个随机的获胜者,并将调查表中的获胜者coloumn设置为surveyusers表中的电子邮件。但我真的遇到了很多麻烦。

2 个答案:

答案 0 :(得分:1)

更新可以采用与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设置的幸存者。

答案 1 :(得分:-1)

您可以在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是要更新的调查。