2008-11-04 11 views
44

Bazı kodları hata ayıklamak ve aşağıdaki SQL sorgusu var (gerçekten ne olduğundan basitleştirilmiş).x'in birden çok değere eşit olduğu seçim nasıl yapılır?

SELECT ads.*, location.county 
FROM ads 
LEFT JOIN location ON location.county = ads.county_id 
WHERE ads.published = 1 
AND ads.type = 13 
AND ads.county_id = 2 
OR ads.county_id = 5 
OR ads.county_id = 7 
OR ads.county_id = 9 

Ben sorgudan çok garip sonuçlar alıyorum ve sanırım onun yüzünden ilk VEYA ondan önce bulunan VE 's sıfırlanması olacaktır. Bu yüzden, yalnızca tür 13'te değil, her tür reklam için sonuçlar elde ediyorum. Sorguya her arandığında, birden fazla ülkenin görünmesi gerekebilir.

Bu konuda ilerlemek için doğru yolda herhangi bir yardım mutluluk duyacağız. "VEYA" s civarında

cevap

98

koyun parantez:

SELECT ads.*, location.county 
FROM ads 
LEFT JOIN location ON location.county = ads.county_id 
WHERE ads.published = 1 
AND ads.type = 13 
AND 
(
    ads.county_id = 2 
    OR ads.county_id = 5 
    OR ads.county_id = 7 
    OR ads.county_id = 9 
) 

Hatta daha da iyisi, IN kullanın:

SELECT ads.*, location.county 
FROM ads 
LEFT JOIN location ON location.county = ads.county_id 
WHERE ads.published = 1 
AND ads.type = 13 
AND ads.county_id IN (2, 5, 7, 9) 
+7

IN sürümünün okunması daha kolay ve beklenmedik sonuçlara dönme olasılığı daha düşük. – DOK

+4

da *** büyük ölçüde *** daha hızlı, en azından MySQL – warren

+1

Benim durumumda 'IN' değerleri başka bir seçme sorgunun sonucundan geliyor, bunu nasıl halledebilirim? –

17

emin sorgu yorumlanır yapmak VEYA ifadeleri parantez kullanmayı da deneyebilirsiniz doğru veya daha fazla öz, IN kullanın:

SELECT ads.*, location.county 
FROM ads 
LEFT JOIN location ON location.county = ads.county_id 
WHERE ads.published = 1 
AND ads.type = 13 
AND ads.county_id IN (2,5,7,9) 
11

ve daha da basit İÇİNDE kullanarak:

SELECT ads.*, location.county 
    FROM ads 
    LEFT JOIN location ON location.county = ads.county_id 
    WHERE ads.published = 1 
     AND ads.type = 13 
     AND ads.county_id IN (2,5,7,9)