为了账号安全,请及时绑定邮箱和手机立即绑定

如何有效地检索Mysql表的前20个引用值以及PHP

如何有效地检索Mysql表的前20个引用值以及PHP

PHP
慕田峪4524236 2022-08-05 10:16:06
我有一个表,其中存储了与照片中识别的对象关联的数据。这意味着我每张照片可以有多行。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


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信