gpt4 book ai didi

php - 如何与 PHP 一起高效检索 Mysql 表的前 20 个引用值

转载 作者:行者123 更新时间:2023-11-29 09:25:01 25 4
gpt4 key购买 nike

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

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

+----+--------+---------+-----------+
| 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 检索结果:

从 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

最佳答案

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

SELECT name, COUNT(*) AS cnt
FROM object
WHERE companyId = 50
GROUP BY name
ORDER BY cnt DESC
LIMIT 5

这将返回具有最高 name 值计数的 5 行(或在 LIMIT 子句中输入的行数)。只要您在 namecompanyId 上有索引,无论表大小如何,此查询都应该表现良好。

Demo on SQLFiddle

关于php - 如何与 PHP 一起高效检索 Mysql 表的前 20 个引用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59759945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com