我的表格中包含5个以逗号分隔的数字。示例:5, 12, 88, 155, 201,
。
共有10000+ rows
。我需要一种方法来计算现有表中每对的计数。
规则:
我需要知道数字5 & 12
一起显示的次数或数字88 & 155
或数字5 & 155
的数量。
我认为我可以做的一种方法是使用双循环,但似乎很慢,并且不会真正适用于三重组合或四个最常见的数字。
我的代码:
for ($i = 1; $i <= 255; $i++) {
for ($j = 1; $j <= 255; $j++) {
// two numbers cant exist in same record
if ($i === $j) continue;
$total = $this->db->getTotalNumFrequencies($i, $j);
}
}
示例记录:
记录1:5, 12, 88, 155, 201,
记录2:1, 5, 55, 88, 255,
记录3:1,55, 99, 151, 191,
示例输出:
组合1:5, 88
,计数:2
,显示在记录中:1, 2
组合1:1, 55
,计数:2
,显示在记录中:2, 3
现在此代码可以正常工作以获得2个数字组合计数。如何在不使用嵌套循环的情况下获得3, 4 & 5
个数字组合?有办法吗?
答案 0 :(得分:0)
在您的情况下使用的示例数据模型,它将支持基于SQL的方法而不是循环:
CREATE TABLE `thingtable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
CREATE TABLE `thing_numbers` (
`thing_id` int(11) NOT NULL,
`numberval` int(11) NOT NULL
)
INSERT INTO `thing_numbers` (`thing_id`, `numberval`) VALUES
(1, 5),
(1, 12),
(2, 5),
(2, 13);
SELECT COUNT(thing_id), thing_id FROM `thing_numbers` WHERE numberval IN (5,12) GROUP BY thing_id
/*will show
COUNT(thing_id) thing_id
2 1
1 2
*/