我有两张桌子: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。
第二个目标是在状态等于1时获取状态记录的数量。
输出应该是这样的:
22222(状态记录的id)1111(car_source_id)title(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
我认为将查询放在循环中并不是一个好主意。如何在一个查询中获得所有价值?
答案 0 :(得分:0)
你的问题很难理解。但是您可以在SELECT
和HAVING
子句中使用条件聚合来组合这两个查询:
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;