【问题标题】:PHP/MYSQL - Generate only one random word inside for loopPHP/MYSQL - 在 for 循环中只生成一个随机词
【发布时间】:2019-01-03 21:21:32
【问题描述】:

我正在游戏中在用户和计算机之间进行小交互。用户始终是第一个采取行动的人,他输入他选择的单词。 我做了一个 sql 查询,获取用户在玩游戏时所做的所有游戏(最多 10 次尝试)。一旦用户迈出第一步,我希望计算机生成一个随机单词,如下所示:

$sql="Select word from plays where user=1 and id=$id";
$result=mysqli_query($link, $sql);

for($i=0;$i<10 && ($row=mysqli_fetch_assoc($result)) ;$i++){

    // some code here

    $random="select word from words order by Rand() LIMIT 1";
    $result=mysqli_query($link, $random);
    $wrandom=mysqli_fetch_assoc($result);
    $wordR=$wrandom['word']; 
 } 

在第一次尝试中一切正常,生成了一个随机词,但在第二次尝试中生成了两个随机词(而不仅仅是一个),在第三次尝试中,生成了 3 个词,依此类推... 我应该怎么做才能每次尝试只生成一个随机单词?

【问题讨论】:

  • 您是否真的在两个查询中使用了相同的 $result 变量,或者您在复制代码时是否更改了它?
  • 我在这里看不到任何每次都会产生更多单词的东西。我怀疑问题出在// some code here

标签: php mysql random


【解决方案1】:

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

$sql = "SELECT p.word as user_word, w.word as computer_word
        FROM plays AS p
        CROSS JOIN words AS w
        WHERE p.user = 1 AND p.id = $id
        ORDER BY RAND()
        LIMIT 10";
$result = mysqli_query($link, $sql);
while ($row = mysqli_fetch_assoc($result)) {
    $wordU = $row['user_word'];
    $wordR = $row['computer_word'];
    // some code here
}

【讨论】:

    【解决方案2】:

    您应该尝试在循环中更改变量 $result 的名称,因为它会与您的第一个 $result 变量产生冲突。

    【讨论】:

    • 这似乎是另一个问题的解决方案。我看不出这个错误会如何导致他在每次迭代中得到多个单词。
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2019-11-11
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2023-01-03
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多