rel
フィールドといくつかの実用的なPHPコードを含むテーブルがid
refid
cellid
cat
あり、それぞれの行数をカウントしてcellid
、後で使用するために配列として返します。
<?php
// connect to database
require($DOCUMENT_ROOT . "connect.php");
// count the number of relationships for each cell id
$cell_array = array();
if ($result = mysqli_query($link, "SELECT cellid, COUNT(*) totalcount, cat FROM rel GROUP BY cellid")) {
if (mysqli_num_rows($result)) {
while ($row = mysqli_fetch_assoc($result)) {
$cell_array[$row["cellid"]] = $row['totalcount'];
}
}
}
?>
次に、関数を追加し、それぞれのモード(最も一般的な値)を計算してcat
、cellid
その値を配列に含めます。複数のモードがある場合、またはモードがない場合は、9を返します(cat
1から8の値のみを持つことができます)。
私はモードを見つける方法を読んでいますが、一般的な解決策は次のようになります。
SELECT COUNT(*) frequency, cat, cellid
FROM rel
GROUP BY cat
ORDER BY COUNT(*) DESC
LIMIT 1
しかし、これは、一般的に最も一般的なものごとに最も一般的なものを返すわけではありませcat
ん。cellid
cat
私はサブクエリを使用して作業しています
SELECT cellid, cat, COUNT( * )
FROM `rel`
GROUP BY cellid, cat
これにより、組み合わせごとに行が生成cellid
cat
されますが、これを使用して、それぞれのエントリの総数と、それぞれの最も一般的なエントリを見つける方法がわかりませんcellid
。cat
cellid
編集
私はさらに進歩を遂げました、私は今、cat
それぞれのモードを見つけるための作業クエリを持っていますcellid
SELECT cellid, cat
FROM rel t
GROUP BY cellid, cat
HAVING cat = (
SELECT cat
FROM rel
WHERE cellid = t.cellid
GROUP BY cat
ORDER BY COUNT( * ) DESC , cat
LIMIT 1 )
しかし、2つのクエリを組み合わせる方法がまだわかりません。一方からの出力は、もう一方では使用できません。