【问题标题】:return randomised mysql function from an array?从数组中返回随机的mysql函数?
【发布时间】:2012-04-25 19:02:55
【问题描述】:

所以我想创建一个脚本,其中大约有十个 mysql 函数为用户提供不同的项目,每当用户点击页面时,其中一个函数会随机执行。 这是我需要的一种 rpg 功能,根据用户的狩猎水平,他们会更成功,但并不总是能得到食物。因此,他们点击页面并从一组项目中随机返回一个,并通过 mysql_query 将该项目提供给他们。

我希望这是有道理的,如果没有,请告诉我......

到目前为止,我已经有了这些起点

$input = array("value 1", "value 2", "value 3", "value 4", "value 5");
 $rand_keys = array_rand($input, 1);
 echo $input[$rand_keys[0]] . "\n";

我不知道这是否允许在数组中进行 mysql 查询。 我也考虑过使用重定向的东西,但是我尝试过的那个一直重定向,这不是我想要的,并且可以篡改 url 以获得好的结果......

无论如何,我希望这是有道理的,任何帮助将不胜感激:)

【问题讨论】:

    标签: mysql arrays random


    【解决方案1】:

    我会通过一个包含项目及其价值的表格来应对这一挑战。其中一列是prio_drop。如果您希望某个项目更频繁地被丢弃,它的价值可以是2,而其他项目的价值是1。值越高,机会越大。

    然后我会做一个:

    $arr_items = array(1, 2, 3, 5); /* This event can drop items with these ids */
    $str_items = implode(', ', $arr_items);
    
    mysql_query("
    SELECT id, name
    FROM items
    WHERE id IN ({$str_items})
    ORDER BY (RAND() * prio_drop) DESC
    LIMIT 1
    ");
    

    希望我理解正确吗?

    【讨论】:

    • 非常感谢,这正是我需要的!当其他一切都完成后,我会尝试它,但有没有什么方法可以包括它不返回任何内容的可能性,这样使用它的人就不会总是得到什么?
    • 我猜你可以有一个小丑项目,如果选择它什么都没有,并且有一个额外的列来说明它是否是小丑。否则,您应该简单地在 php 中执行 if (rand(1, 10) <= 8) return; 并完全跳过运行查询。
    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2014-09-15
    • 1970-01-01
    • 2016-12-29
    • 2016-10-29
    • 2012-01-21
    相关资源
    最近更新 更多