2016-03-30 21 views
0

İki tablom var: vehicle_c2c_car_source ve vehicle_c2c_appoint_task. vehicle_c2c_car_source arasında yapısı:mysql sorgumu nasıl optimize edebilirim

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

`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' 

v durumun aksesuarı 0,1,2 olabilir. Bir car_source_id bir çok statüye sahip olabilir.

ilk gol durum kayıtlarının miktarı az 3.

ikinci golü durumu 1.

eşit olduğunda durum kayıtların miktarını elde etmektir tüm car_source elde etmektir

çıkış gerektiği böyle bir şey:

22222 (durum kayıtlarının id) 1111 (car_source_id) başlık (title)

Benim şu anki çözüm elde etmek ilk 4 (durum = 1 durumu kayıtlarının tutar) tüm car_source bana ilk hedefi ve sonra ikinci hedefi gerçekleştirmek için bir döngü içinde tool_c2c_appoint_task tablosunu sorgulayın. döngüde

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 

Ben bir döngü içinde sorgu koymak için iyi bir fikir olmadığını düşünüyorum. Tüm değeri bir sorguda nasıl alabilirim?

cevap

0

Sorunuz izlenmesi zor. Ama SELECT ve HAVING maddesi hem de koşullu toplanmasına kullanarak iki sorgu birleştirebilirsiniz:

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; 
+0

SUM (status = 1) hile yaptı, teşekkürler – user3210341

İlgili konular