首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从5列表MySQL中选择2-3个数字组合

从5列表MySQL中选择2-3个数字组合
EN

Stack Overflow用户
提问于 2013-03-30 22:19:15
回答 2查看 748关注 0票数 1

表结构:

代码语言:javascript
复制
 MyTable (
   ID INT AUTO_INCREMENT,
   Num1 INT,
   Num2 INT,
   Num3 INT,
   Num4 INT,
   PRIMARY KEY(ID)
 )engine=InnoDB;

现在我有了大约20到30k的记录。Num1, Num2, Num3Num4只是一些随机数。我试图从这个表中选择23 数字组合。例如,假设表中有以下行:

代码语言:javascript
复制
ID    Num1   Num2   Num3   Num4
1     20     11     9      150
2     30     11     20     19
3     40     45     11     20

我希望选择最常用的2数字组合,然后选择3数字组合。所以请注意,2011在表中出现3次数,这意味着组合20,11 or 11,20并不重要,顺序有、count、3、等等。

我希望在PHP数组中检索这些数据,这样我就可以在屏幕上进行一些计算或显示。

到目前为止我尝试过的是:

代码语言:javascript
复制
 SELECT *
 FROM MyTable
 WHERE (Num1 = :num1 AND Num2 = :num2) OR (Num1 = :num1 AND Num3 = :num2) OR 
       (Num1 = :num1 AND Num4 = :num2) OR (Num2 = :num1 AND Num1 = :num2) OR 
       (Num2 = :num1 AND Num3 = :num2) OR (Num2 = :num1 AND Num4 = :num2) OR 
       ***
       ***

诸如此类的组合。现在,如果我尝试将它用于3数字组合,这会变得很烦人。

  1. 是否有更好和更有效的方法来做到这一点?
  2. 我是否需要重组表格以使这件事变得更容易?
  3. 重组后的表会标准化吗?(现在我想是正常化了,如果不是,请告诉我)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-30 22:28:54

案例2组合

我认为你应该考虑在这样的大矩阵中存储信息:

代码语言:javascript
复制
num  times_appearing_with_number_1 times_appearing_with_number_2 ...

对于像这样的案子

代码语言:javascript
复制
 1 8 2 3
 1 7 23 24

就像:

代码语言:javascript
复制
 num 1 2 3 4 5 6 ...
 1   - 1 1 0 0 0 ...
 2   1 - 1 0 0 0 ...

然后你检查哪些行有更大的号码。索引对于获取它对应的数字将是有用的。

案例3组合

3D矩阵也是如此。

要输入这些表,您应该只从MySQL获取信息,然后循环。

票数 1
EN

Stack Overflow用户

发布于 2013-03-30 22:45:28

由于值的顺序并不重要,从四列中选出两个列(c1-c2、c1-c3、c1-c4、c2-c3、c2-c4和c3-c4)中只有6个排列,而选择三个列(c1-c2-c3、c1-c2-c4、c2-c3-c4)只有4个排列。

一种方法是创建一个临时表,该表包含行的id和这些值的所有6(4个代表三个科尔)排列。您可以使用这样的查询:

代码语言:javascript
复制
SELECT id, CASE Num1<=Num2 WHEN TRUE THEN CONCAT(Num1,"-",Num2) ELSE CONCAT(Num2,"-",Num1) END FROM MyTable
UNION
SELECT id, CASE Num1<=Num3 WHEN TRUE THEN CONCAT(Num1,"-",Num3) ELSE CONCAT(Num3,"-",Num1) END FROM MyTable
...

剩下的就是计数匹配的行数(请注意,上面的查询可以手动运行,也可以作为计数查询的子查询运行)

编辑:用于小提琴的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15724142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档