Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中创建查找表的最快方法_Php_Mysql_Sql_Lookup_Poker - Fatal编程技术网

Php 在MySQL中创建查找表的最快方法

Php 在MySQL中创建查找表的最快方法,php,mysql,sql,lookup,poker,Php,Mysql,Sql,Lookup,Poker,我想为扑克手的组合创建一个查找表。在一个7张牌的棋盘上有1.13亿种不同的手部组合 如果我给每张卡一个数字,比如说(1-52),并想在表中存储每个可能的组合,那么最好的方法是什么?我希望它能够快速查找,这样,如果我有一只手13,18,1,51,38,8,49,我就可以搜索表中的行 我可以将每张卡片存储在它自己的列中,如下所示: poker_hands (id, card1, card2, card3, card4, card5, card6, card7) 或者我可以为7张卡片创建某种散列值,

我想为扑克手的组合创建一个查找表。在一个7张牌的棋盘上有1.13亿种不同的手部组合

如果我给每张卡一个数字,比如说(1-52),并想在表中存储每个可能的组合,那么最好的方法是什么?我希望它能够快速查找,这样,如果我有一只手13,18,1,51,38,8,49,我就可以搜索表中的行

我可以将每张卡片存储在它自己的列中,如下所示:

poker_hands (id, card1, card2, card3, card4, card5, card6, card7)
或者我可以为7张卡片创建某种散列值,如:

$string= md5($card1 . $card2 . $card3 . $card4 . $card5 . $card6. $card7);
然后用它来查找手

poker_hands (id, hash) 

(我还将在数据库中存储每只手的排名信息;但现在我只想知道创建查找表的最佳方法。)

首先创建一个从1到52的数字列表。您可以通过以下方式执行此操作:

create table numbers as
    select 1 as n union all select 2 union all . . .;
或者,从已存在的表中:

create table numbers as
    select (@rn := @rn + 1) as n
    from t
    limit 52;
然后,使用交叉连接创建组合:

create table hands as
    select n1.n as card1, n2.n as card2, n3.n as card3, n4.n as card4,
           n5.n as card5, n6.n as card6, n7.n as card7
    from numbers n1 cross join
         numbers n2 cross join
         numbers n3 cross join
         numbers n4 cross join
         numbers n5 cross join
         numbers n6 cross join
         numbers n7;
这可能是数据库中最快的方法

编辑:

如果卡片应不同,则将其放入适当的条件中:

create table hands as
    select n1.n as card1, n2.n as card2, n3.n as card3, n4.n as card4,
           n5.n as card5, n6.n as card6, n7.n as card7
    from numbers n1 join
         numbers n2
         on n2.n not in (n1.n) join
         numbers n3
         on n3.n not in (n1.n, n2.n) join
         numbers n4
         on n4.n not in (n1.n, n2.n, n3.n) join
         numbers n5
         on n5.n not in (n1.n, n2.n, n3.n, n4.n) join
         numbers n6
         on n6.n not in (n1.n, n2.n, n3.n, n4.n, n5.n) join
         numbers n7
         on n7.n not in (n1.n, n2.n, n3.n, n4.n, n5.n, n6.n);

杂烩看起来不错。但是如果你生成了它,检查一下,有没有重复的。我不知道1.13亿条记录的性能,我认为这应该不会有问题,但如果你坚持使用它,你可以尝试使用nosql。使用a将你的对存储在一个静态结构中。然后您可以相当快地访问它。为什么不将七个卡ID一起作为键(格式为%02d,以避免像1,2=12这样的错误)从较低的值变为较高的值?例如,对于组合卡2、43、25、31、1、10和11,id应该是01021011253143,我认为有1.337亿combinations@Amarnasan散列有效地做同样的事情,但效率更高。这也会有像1,1,1,1,1,1这样的组合,它们在当前上下文中无效。