0
得到表的统计数据,我有以下表结构:算法/查询使用PHP/MySQL的
CREATE TABLE test(
myID INT,
num1 INT,
num2 INT,
num3 INT,
PRIMARY KEY (myID)
)engine=innodb;
现在我已经在表中的以下数据:
myID num1 num2 num3
1 15 27 98
2 27 38 66
3 15 27 77
现在我需要运行2个查询,第一个查询运行选择所有数字,在PHP端我计算每个数字出现的次数(频率),第二个查询应选择第二个最频繁的数字。 第一查询:
$numfreq = PDO->prepare('
SELECT num1, num2, num3
FROM test
');
$numfreq->execute();
$allNums = array();
while ($row = $numfreq->fetch(PDO::FETCH_ASSOC)) {
$allNums[] = intval($row['num1']);
$allNums[] = intval($row['num2']);
$allNums[] = intval($row['num3']);
}
$numFrequencies = array_count_values($allNums);
arsort($numFrequencies);
这个正确返回从表中的每个数的频率。现在的第二部分
这是我需要帮助:
我得到的最频繁的出现在这种情况下,数量及其,因为它的频率是,我需要选择1号码出现最接近意味着我需要得到某种数字因为它出现两次旁边。
我大概可以算出PHP方面的算法,但我想知道是否有可能使用查询做到这一点?
所以最终的结果将是:
most frequent number: 27
most frequent number 27 combined with 15 appears 2 times and is most frequent combination.
你能解释与联盟的内部查询部分? – GGio 2013-02-18 22:09:04