我有一个表,其中存储了与照片中识别的对象关联的数据。这意味着我每张照片可以有多行。object显示 1 张照片中识别的 3 个对象的表格示例。object+----+--------+---------+-----------+| id | name | photoId | companyId |+----+--------+---------+-----------+| 1 | Person | 33 | 50 |+----+--------+---------+-----------+| 2 | Cat | 33 | 50 |+----+--------+---------+-----------+| 3 | Dog | 33 | 50 |+----+--------+---------+-----------+最终,这张桌子可能会变得巨大。如果上传了 500,000 张照片,并且每个照片中识别了 20 个对象,则为 10,000,000 行。问题我应该担心此表中的潜在行数吗?有没有办法有效地查询此表,以便为自己提供每个公司已识别的前5个对象的列表?我有一个尝试,如下所示,但它似乎已经很迟钝,因为我存储的最小数据。object.companyId我的尝试:从 MySql 检索结果:select * from object where companyId=50在 PHP 中迭代结果以获取每个标签的计数:foreach($res as $row){ //get how many times this label shows up in the results $labelCnt = array_count_values(array_column($res, 'name'))[$row['name']]; //create an array of all label counts (label -> cnt) $allLabelCntArr[$row['name']] = $labelCnt;}arsort($allLabelCnts); //sort from highest to lowest$topFive = array_slice($allLabelCnts, 0, 5, true); //get top 5
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
您可以直接在MySQL查询中获取给定公司的前5个对象:
SELECT name, COUNT(*) AS cnt
FROM object
WHERE companyId = 50
GROUP BY name
ORDER BY cnt DESC
LIMIT 5
这将返回值计数最高的 5 行(或您在子句中放置的行数)。只要您打开了索引,并且无论表大小如何,此查询都应运行良好。LIMITnamenamecompanyId
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消