Php 从5列表中选择2-3个数字组合
表结构:Php 从5列表中选择2-3个数字组合,php,mysql,normalization,Php,Mysql,Normalization,表结构: MyTable ( ID INT AUTO_INCREMENT, Num1 INT, Num2 INT, Num3 INT, Num4 INT, PRIMARY KEY(ID) )engine=InnoDB; 现在我有大约20-30k的记录Num1、Num2、Num3和Num4只是一些随机数。我正在尝试从该表中选择2和3数字组合。例如,假设表中有以下行: ID Num1 Num2 Num3 Num4 1 20
MyTable (
ID INT AUTO_INCREMENT,
Num1 INT,
Num2 INT,
Num3 INT,
Num4 INT,
PRIMARY KEY(ID)
)engine=InnoDB;
现在我有大约20-30k的记录Num1、Num2、Num3
和Num4
只是一些随机数。我正在尝试从该表中选择2
和3
数字组合。例如,假设表中有以下行:
ID Num1 Num2 Num3 Num4
1 20 11 9 150
2 30 11 20 19
3 40 45 11 20
我想选择最常用的2数字组合,然后选择3数字组合。因此请注意,20和11在表中出现3次表示组合20,11或11,20
无关紧要,顺序为计数3,以此类推
我想在PHP数组中检索这些数据,以便进行一些计算或在屏幕上显示
到目前为止,我尝试的是:
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数字组合,这会变得很烦人
案例2组合 我认为你应该在这样的大矩阵中考虑商店信息:
num times_appearing_with_number_1 times_appearing_with_number_2 ...
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 8 2 3
1 7 23 24
就像:
num 1 2 3 4 5 6 ...
1 - 1 1 0 0 0 ...
2 1 - 1 0 0 0 ...
然后检查哪一行的数字更大。索引对于获取它对应的数字很有用
案例3组合
3D矩阵也是如此
要提供这些表,您应该只从MySQL获取信息,然后循环。因为值的顺序无关紧要,所以只有6个排列可以从四列中选择两列(c1-c2、c1-c3、c1-c4、c2-c3、c2-c4和c3-c4),只有四个排列可以选择三列(c1-c2-c3、c1-c2-c4、c1-c3-c4、c2-c3-c4) 一种方法是创建一个临时表,其中包含行的id和这些值的所有6(4表示三个列)排列。您可以使用如下查询:
num times_appearing_with_number_1 times_appearing_with_number_2 ...
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
...
选择id,CASE num1,那么您建议将所有数据从MySQL获取到PHP中,然后用PHP完成所有工作?是的。事实上,我的答案是基于你的一句话,我想在PHP数组中检索这些数据,这样我就可以做一些计算或在屏幕上显示。是的,问题是从一个ajax调用中检索2个num组合,从另一个ajax调用中检索3个num组合。为每个ajax调用构建矩阵有点多余,不是吗?代码片段只显示了您需要执行的六个查询中的两个,其他查询仅在本文中提到。