首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与PHP一起有效地检索Mysql表的前20个引用值

问如何与PHP一起有效地检索Mysql表的前20个引用值
EN

Stack Overflow用户
提问于 2020-01-15 21:40:23
回答 1查看 20关注 0票数 0

我有一个object表,其中存储与照片中识别的对象相关的数据。这意味着每一张照片可以有多行。

object表示例,显示在1张照片中识别的3个对象。

代码语言:javascript
复制
+----+--------+---------+-----------+
| id | name   | photoId | companyId |
+----+--------+---------+-----------+
| 1  | Person | 33      | 50        |
+----+--------+---------+-----------+
| 2  | Cat    | 33      | 50        |
+----+--------+---------+-----------+
| 3  | Dog    | 33      | 50        |
+----+--------+---------+-----------+

最终,这张桌子可能会变得很大。如果上传了500,000张照片,并且在每个文件中识别了20个对象,则为10,000,000行。

问题

  • 我应该担心这个表中潜在的行数吗?
  • 是否有一种方法可以通过object.companyId有效地查询这个表,以便为自己提供每个公司已识别的前5位对象的列表?下面显示了我的尝试,但由于我存储的数据很少,它看起来已经很慢了。

我的尝试:

从MySql检索结果:

select * from object where companyId=50

在PHP中迭代结果以获得每个标签的计数:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 21:59:24

您可以在MySQL查询中直接获取给定公司的前5个对象:

代码语言:javascript
复制
SELECT name, COUNT(*) AS cnt
FROM object
WHERE companyId = 50
GROUP BY name
ORDER BY cnt DESC
LIMIT 5

这将返回具有最高计数的LIMIT值的5行(或您在name子句中放入的行数)。只要您有name和companyId上的索引,不管表大小如何,这个查询都应该执行得很好。

基于SQLFiddle的演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59759945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档