2009-10-06 2 views
12

Ich habe zwei Tabellen.Mysql Zähler zurück Null, wenn kein Datensatz gefunden

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

Ich mag es [properties.count(id_city)]

Wie kann ich eine Abfrage, die nach wie vor gibt Null zurück, wenn keine Datensätze von NULL gefunden werden stattdessen cities.city_name und neben angezeigt werden, so dass ich Ergebnisse wie diese:

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

wo "New York" ist [0], nicht NULL und nicht 1?

+0

Ihre Frage ist nicht klar .... –

+0

Wie lautet Ihre aktuelle Suchanfrage? – recursive

+0

Ich tat mein Bestes, um es ein bisschen aufzuräumen, damit es klarer wurde. –

Antwort

17

Verwenden Sie eine äußere Verknüpfung:

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

Wählen Sie cities.city_name, count (*) von Städten links Join Eigenschaften auf cities.id_city = properties.id_city Gruppe von 1 – Preston

+0

es ist falsch! es gibt Ergebnisse mit "1" zurück, auch wenn es keine Übereinstimmungen gibt –

+0

try count (properties.id_property) statt count (*) – timdev

1

Die Abfrage:

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 

sollte eine 0 Zählung zurück, wo Sie es wollen, auch wenn ich nicht 100% sicher bin, funktioniert es auf diese Weise in MySQL .

13

Ich denke, das Folgende wird es für Sie tun, obwohl ich es nicht getestet habe. Der Trick besteht darin, die Eigentumszählungen in einer Tabelle abzurufen und dann diese Tabelle an die Tabelle cities anzuschließen, wobei NULL mit der Funktion IFNULL in 0 umgewandelt wird.

SELECT city_name, IFNULL(property_count, 0) 
FROM cities 
LEFT JOIN 
    (SELECT id_city, count(*) as property_count 
    FROM properties 
    GROUP BY id_city) city_properties 
    USING (id_city); 
-2

Einfach. Verwenden Sie "(Count (*) + 0)". Jede Null plus 0 gibt eine Zahl zurück.

+0

Es wird jedoch keine 0 zurückgegeben, wenn in der Liste kein Eintrag erstellt wurde. – Ben