2010-03-06 3 views
5

Come posso ottenere il mio database mysql per restituire 0 se il vicinato nella clausola WHERE non esiste? Quindi nell'esempio qui sotto, Old Town non è nel database. Mi piacerebbe che il database restituisse 0 incidenti invece di un risultato vuoto.Come restituire 0 da un db MySQL Quando il termine nella clausola Where non è nel database?

SELECT incidents, 
     neighborhoods 
FROM `myTable` 
WHERE neighborhoods ='Old Town' 

Ho anche provato

SELECT IFNULL(incidents,0), 
     IFNULL(neighborhoods,0) 
    FROM `myTable` 
WHERE neighborhoods ='Old Town' 

Ogni suggerimento sarà molto apprezzato.

+2

Generalmente le persone sono perfettamente contenuto di tornare un set di risultati vuoto quando ci non è un record corrispondente nel database. Perché questo è un problema per te? Cosa stai cercando di realizzare qui? – Asaph

+0

Ciao Asaph, Grazie per il messaggio. Ho semplificato un po 'il mio esempio. Fondamentalmente, sto selezionando da più tabelle, facendo una media degli incidenti e poi ripetendo questo processo con altre tabelle, e quindi restituendo l'intero risultato alla mia app Flex. Quindi il mio codice funziona, tranne quando il quartiere non esiste nella tabella. Ho anche un problema nel calcolo della media (ROUND SELECT ((SUM (incidenti)/4), 1) AS avg_annual_incidents ... dove posso avere 0/4 Sono limitata nel numero di caratteri che sto permesso in questo messaggio vi posterò un altro messaggio Grazie -Laxmidi – Laxmidi

+0

Hi Asaf, il mio codice sembra più simile al seguente:.. $ query = "(ROUND SELEZIONA ((SUM (incidenti)/4.087), 1) AS avg_annual_incidents, quartieri, 'ADW' come reato DA ( SELECT * FROM 'adw_2009_incident_location' UNION ALL SELECT * FROM ' adw_2008_incident_location' UNION ALL SELECT * FROM 'adw_2007_incident_location' UNION ALL SELEZIONA * da 'adw_2006_incident_location' UNION ALL SELECT * FROM adw_jan1_feb1_2010_incident_location ) AS combinata in cui quartieri = '$ neighborhood_id' GROUP BY quartieri) UNION ALL (continua nello stesso modello con differenti tabelle 6 più volte). – Laxmidi

risposta

1

mio prendere sul problema è quello di costruire una tabella derivata dei neighborhoods valori si spera di trovare, e LEFT JOIN alla tabella effettiva:

SELECT x.neighborhoods, 
      COALESCE(mt.incidents, 0) AS incidents 
    FROM (SELECT 'Old Town' AS neighborhoods 
      FROM DUAL 
      UNION ALL 
      SELECT 'New Town' 
      FROM DUAL) x 
LEFT JOIN MYTABLE mt ON mt.neighborhoods = x.neighborhoods 
+0

OMG Ponies, Ho seguito il tuo consiglio. Ho un tavolo dei quartieri e l'ho usato per fare un SINISTRA. Grazie. Tutto il meglio. -Laxmidi – Laxmidi

3
SELECT COALESCE(SUM(incidents), 0), 'Old Town' 
FROM `myTable` 
WHERE neighborhoods = 'Old Town' 
+1

Cosa succede se ci sono più righe che corrispondono alla condizione nella clausola 'WHERE'? In tal caso, sembra che l'OP desideri che tutte le righe vengano restituite anziché aggregate. – Asaph

+0

Mark, Grazie per il tuo commento. -Laxmidi – Laxmidi

0

È possibile aggiungere COUNT(*) nella parte di selezione, che vi dà la quantità di righe nel set di risultati. Finché vuoi leggere solo una riga ti dà sia o .

SELECT COUNT(*), Foo, Bar FROM Bla WHERE false; 
+----------+-----+-----+ 
| COUNT(*) | Foo | Bar | 
+----------+-----+-----+ 
|  0 | NULL | NULL | 
+----------+-----+-----+ 

SELECT COUNT(*), Foo, Bar FROM Bla WHERE Bar = 0; 
+----------+------------+-----+ 
| COUNT(*) | Foo  | Bar | 
+----------+------------+-----+ 
|  1 | 2147483647 | 0 | 
+----------+------------+-----+ 

Ma se si ottiene più di una riga, potrebbe non riuscire poiché si ottiene solo una riga dal set di risultati.

SELECT COUNT(*), Foo, Bar FROM Bla WHERE Bar >= 0; 
+----------+-----+-----+ 
| COUNT(*) | Foo | Bar | 
+----------+-----+-----+ 
|  7 | 3 | 6 | 
+----------+-----+-----+ 

(E non dimenticare di usare un alias per la colonna COUNT(*))

+0

Hi Progman, Grazie per l'idea. Posso usare un'istruzione if con SELECT COUNT (*) COME myCount FROM myTable' WHERE neighborhood = 'Old Town' come condizione nella mia funzione. Ciò restituirebbe 0, che è quello che voglio. Ma come impostare il valore del quartiere come "Città vecchia" e il valore dell'incidente come 0? Non penso di voler usare SET e UPDATE. Eventuali suggerimenti? Grazie! -Laxmidi – Laxmidi

0

Se è necessario restituire 0 dal DB Io suggerisco di usare una funzione.

In caso contrario, è possibile controllare l'esistenza dal codice utilizzando una query COUNT() prima di eseguire la query effettiva.

+0

mcabral, Grazie per il suggerimento. -Laxmidi – Laxmidi