![](/img/trans.png)
[英]How to select rows from a table by selecting combination of related data in a particular column? MySQL
[英]Select 2-3 number combination from 5 column Table MySQL
表結構:
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 or 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 ...
對於像這樣的情況
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個(3個列為4)排列。 您可以使用如下查詢:
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
...
然后剩下的就是計算匹配的行數(請注意,上面的查詢可以手動運行,也可以作為計數查詢的子查詢)
編輯:要的東西撥弄用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.