gpt4 book ai didi

php - 每次获取相同值时,Mysql 查询都会运行 COUNT

转载 作者:行者123 更新时间:2023-11-29 22:04:49 24 4
gpt4 key购买 nike

我目前正在使用 Laravels QueryBuilder 来获取所有用户及其拥有的开放票证数量。

查询如下所示:

return DB::table('users')
->leftjoin('tickets', 'users.organisation', '=', 'tickets.organisation')
->leftjoin('tickets_statuses', 'tickets.ticket_id', '=', 'tickets_statuses.ticket_id')
->select(
'users.organisation',
DB::raw('COUNT(tickets.ticket_id) as tickets')
)
->where('tickets_statuses.status_id', 0)
->where('users.admin', false)
->groupby('users.organisation')
->get();

问题是,我可能有 6 个用户属于同一组织。因此,如果 80 个开放工单属于该组织,则由于某种原因,查询将执行 80 x 6,从而导致 480 个开放工单计数,而实际上应该是 80 个。

/** 编辑 **/

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`organisation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`parent_account` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`admin` tinyint(1) NOT NULL,
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


+----+---------------------------+-------------------------------------+---------------------------------+
| id | name | email | organisation |
+----+---------------------------+-------------------------------------+---------------------------------+
| 6 | Bruce Mayert MD | Hodkiewicz.Nicolette@gmail.com | Corkery Group |
| 30 | Mr. Willard Bogisich III | Rowena13@gmail.com | Corkery Group |
| 31 | Jacinthe Murphy | Schuyler57@Pfeffer.org | Corkery Group |
| 32 | Zelda Koss PhD | iTillman@Spinka.biz | Corkery Group |
| 33 | Mr. Kevon McCullough MD | kMarks@Green.org | Corkery Group |
| 34 | Prof. Cleveland Prohaska | Ibrahim.Schneider@hotmail.com | Corkery Group |

如您所见,多个用户属于一个组织。现在,如果我运行以下查询:

SELECt ticket_id from tickets where organisation = 'Corkery Group';

我收到以下信息:

一组 80 行(0.00 秒)

从查询中,我想要获取组织名称并计算属于某个组织的所有票证。

当我运行原始查询时,它返回 480 行的结果集,而它应该只返回 80 行。

最佳答案

这里有一个非常好的答案Why do the results of this MySQL query get multiplied by each other?这让我朝着正确的方向前进。

在我的场景中,对于拥有组织的每个用户,都会执行 COUNT()。问题是,如果我有 6 个用户属于一个组织,那么它将运行 COUNT() 语句六次。

回到我的查询,我不需要用户表。这是无关紧要的,因为我只是尝试使用票证和组织名称访问组织 - 所有这些都存储在 ticketstickets_statuses 表中。这给我留下了一个有效的查询:

return DB::table('tickets')
->leftjoin('tickets_statuses', 'tickets.ticket_id', '=', 'tickets_statuses.ticket_id')
->select('tickets.organisation', DB::raw('COUNT(tickets.ticket_id) as tickets'))
->where('tickets_statuses.status_id', 0)
->groupby('tickets.organisation')
->havingRaw('COUNT(tickets.ticket_id) > 1')
->get();

感谢所有回复的人!

关于php - 每次获取相同值时,Mysql 查询都会运行 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256723/

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