gpt4 book ai didi

mysql - 如何优化我的 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 21:11:52 27 4
gpt4 key购买 nike

我有两个表:vehicle_c2c_car_source 和vehicle_c2c_appoint_task。Vehicle_c2c_car_source的结构:

/************************************/

`id` int(11) NOT NULL AUTO_INCREMENT
`title` varchar(200) NOT NULL DEFAULT

/********************************/

vehicle_c2c_appoint_task

/********************************/

`id` int(11) unsigned NOT NULL AUTO_INCREMENT
`car_source_id` int(11) NOT NULL DEFAULT '0'
`status` tinyint(4) NOT NULL DEFAULT '0'

状态的值可以是0,1,2。一个 car_source_id 可以有多种状态。

第一个目标是获取所有状态记录数小于3的car_source。

第二个目标是获取status等于1时的状态记录数量。

输出应该是这样的:

22222(状态记录id) 1111(car_source_id) title(标题) 4(status = 1时状态记录数量)

我目前的解决方案是先获取所有满足第一个目标的car_source,然后循环查询vehicle_c2c_appoint_task表来完成第二个目标。

SELECT cs.id, pt.car_source_id, cs.title, 
FROM vehicle_c2c_car_source AS cs
JOIN vehicle_c2c_appoint_task AS pt ON cs.id = pt.car_source_id
WHERE 1
AND pt.appoint_status NOT IN (2,6)
GROUP BY pt.car_source_id HAVING count(pt.car_source_id) < 3

在循环中:

SELECT count(*) as count 
FROM vehicle_c2c_appoint_task
WHERE status = 1
group by car_source_id

我认为将查询放入循环中不是一个好主意。如何在一次查询中获取所有值?

最佳答案

你的问题很难理解。但是您可以通过在 SELECTHAVING 子句中使用条件聚合来组合这两个查询:

SELECT cs.id, pt.car_source_id, cs.title, SUM(status = 1) as cnt
FROM vehicle_c2c_car_source cs JOIN
vehicle_c2c_appoint_task pt
ON cs.id = pt.car_source_id
GROUP BY pt.car_source_id
HAVING SUM(pt.appoint_status NOT IN (2, 6)) < 3;

关于mysql - 如何优化我的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36298622/

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