2009-10-06 23 views
12

İki tablom var.Mysql sayım dönüşü Kayıt bulunamadıysa sıfır

cities - id_city, city_name 
properties - id_property, id_city, property_name 

Ben cities.city_name görüntülemek istediğiniz ve böyle sonuçlar elde böylece, hiçbir kayıt yerine NULL arasında bulunursa yine sıfır döndüren bir sorgu yapabilirim [properties.count(id_city)]

Nasıl yanında:

London [123] 
New York [0] 
Berlin [11] 

Burada "New York" [0], NULL değil ve 1 değil mi?

+0

Sorunuz net değil. –

+0

Geçerli sorgunuz nedir? – recursive

+0

Biraz temizlemem için elimden gelenin en iyisini yaptım. –

cevap

17

kullanın bir dış birleşim:

select cities.city_name, count(properties.id_city) 
    from cities left join properties on cities.id_city = properties.id_city 
    group by 1 
+0

select cities.city_name, count (*) şehirlerden gelen şehirler için ayrılmadan önce şehirler.id_city = properties.id_city grubu 1 – Preston

+0

hatalı! –

+0

eşleşme sayısı (properties.id_property) yerine sayım (*) – timdev

1

sorgusu:

SELECT cities.*, COUNT(properties.id_city) as num 
FROM cities 
LEFT JOIN properties on cities.id_city=properties.id_city 
GROUP BY cities.id_city 

istediğiniz bir 0 sayımı dönmelidir, ben% 100 emin değilim o MySQL bu şekilde çalışır halde .

13

Sanırım, bunu test etmeme rağmen, sizin için bunu yapacaktır. İşin sırrı tek bir tabloda mülkiyet sayımını almak ve daha sonra soldaki tabloyu şehir tablosuna birleştirmek ve IFNULL işlevini kullanarak NULL'leri 0'lara dönüştürmektir.

-2

Basit. "(Say (*) + 0)" seçeneğini kullanın. Herhangi bir sıfır artı 0 bir sayı döndürür.

+0

Ancak listede hiç bir giriş yoksa 0 döndürmez. – Ben