次のテーブル構造があります。
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側では各数字が出現した回数(頻度)を数えます.2番目のクエリは2番目に頻度の高い数字を選択する必要があります. 最初のクエリ:
$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);
これにより、テーブルから各数値の度数が正しく返されます。では第二部へ
これは私が助けが必要な場所です:
この場合、頻度が3であるため、最も頻繁に表示される番号を取得します。27の隣に最も多く表示される 1 つの番号を選択する必要があります。これは、 27の隣に 2 回表示されるため、何らかの形で番号15を取得する必要があることを意味します。
私はおそらくPHP側でアルゴリズムを理解することができますが、クエリを使用してそれを行うことができるかどうか疑問に思っていましたか?
したがって、最終結果は次のようになります。
most frequent number: 27
most frequent number 27 combined with 15 appears 2 times and is most frequent combination.