【问题标题】:How to find what random row from a random table was chosen如何找到从随机表中选择的随机行
【发布时间】:2016-10-30 18:43:59
【问题描述】:

我正在尝试创建一个网站,用户可以在其中对游戏中的不同项目进行投票,例如等级列表。我希望用户投票的项目来自随机表和该表中的随机行。

现在,我设置了以下代码来查找随机项:

$ran = mt_rand(1, 10);
switch ($ran) {
    case "1":$sql = "SELECT item, rating FROM ditems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["gun"];
         };
         break;
    case "2":$sql = "SELECT item, rating FROM citems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["item"];
         }; 
etc

我遇到的问题是我无法访问switch{} 语句之外的所选项目,因为$row 数组是在本地声明的,但我必须能够这样做才能做到设置一个按钮来对项目进行投票。

编辑:我决定将所有项目放在一个表中并使用 按兰德限 1 排序

【问题讨论】:

  • 您的商品是否有任何 ID 可用于配对商品?你能显示更多你的代码吗?目前,我没有看到足够的信息来帮助您。
  • 为什么要多张桌子?
  • 当您的查询只返回一条记录时,为什么要使用while?然后你有$ran,它指定了你从哪个表中获取了记录,你为什么不能用它来设置按钮?和@Strawberry 一样,为什么你有不止一张桌子?!这些表的数据结构是否相互不同?

标签: php mysql sql random


【解决方案1】:

你可以SELECT另一列用文本常量来表示选择了什么实体:

$ran = mt_rand(1, 10);
switch ($ran) {
    case "1":$sql = "SELECT 'ditem' as entity, item, rating FROM ditems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["gun"];
         };
         break;
    case "2":$sql = "SELECT 'citem' as entity, item, rating FROM citems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["item"];
         }; 
etc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多