我有一个rel
包含字段id
refid
cellid
cat
和一些工作 PHP 代码的表来计算每个字段的行数,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 )
但是我仍然不确定如何组合这两个查询,因为一个查询的输出不能用于另一个查询。