2010-03-06 17 views
5

Làm cách nào để lấy cơ sở dữ liệu mysql của tôi trả về 0 nếu vùng lân cận trong mệnh đề WHERE không tồn tại? Vì vậy, trong ví dụ dưới đây, Old Town không có trong cơ sở dữ liệu. Tôi muốn cơ sở dữ liệu trả lại 0 sự cố thay vì kết quả trống.Làm cách nào để tôi trả về 0 Từ một db của MySQL Khi thuật ngữ trong khoản ở đâu không có trong cơ sở dữ liệu?

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

Tôi cũng đã cố gắng

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

Bất kỳ đề xuất sẽ được thực sự đánh giá cao.

+2

Nói chung mọi người là hoàn toàn nội dung nhận lại một tập kết quả có sản phẩm nào khi có không có bản ghi phù hợp trong cơ sở dữ liệu. Tại sao đây là một vấn đề cho bạn? Bạn đang cố gắng làm gì ở đây? – Asaph

+0

Hi Asaph, Cảm ơn bạn đã gửi thư. Tôi đã đơn giản hóa ví dụ của tôi một chút. Về cơ bản, tôi đang lựa chọn từ một số bảng, làm cho trung bình của sự cố và sau đó lặp lại quá trình này với các bảng khác, và sau đó trả lại toàn bộ kết quả cho ứng dụng Flex của tôi. Vì vậy, mã của tôi hoạt động, ngoại trừ khi vùng lân cận không tồn tại trong bảng. Tôi cũng đã có một vấn đề khi tính trung bình (SELECT ROUND ((SUM (sự cố)/4), 1) AS avg_annual_incidents ... nơi tôi có thể có 0/4 tôi là giới hạn trong số những nhân vật tôi được phép trong thông báo này, tôi sẽ đăng bài viết khác Cảm ơn -Laxmidi – Laxmidi

+0

Hi Asaph, mã của tôi trông giống như sau:.. $ query = "(SELECT ROUND ((SUM (sự cố)/4.087), 1) AS avg_annual_incidents, khu dân cư, 'ADW' như hành vi phạm tội TỪ ( SELECT * FROM ' adw_2009_incident_location' UNION ALL SELECT * FROM' adw_2008_incident_location' UNION ALL SELECT * FROM ' adw_2007_incident_location' union all select * FROM 'adw_2006_incident_location' UNION ALL SELECT * TỪ adw_jan1_feb1_2010_incident_location ) AS combo nơi hàng xóm = '$ neighborhood_id' GROUP BY vùng lân cận) UNION ALL (nó tiếp tục trong cùng một khuôn mẫu với các bảng khác nhau hơn 6 lần). – Laxmidi

Trả lời

1

Đưa tôi về vấn đề của bạn là xây dựng một bảng có nguồn gốc của neighborhoods giá trị mà bạn hy vọng sẽ tìm thấy, và LEFT JOIN vào bảng thực tế:

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, Tôi đã làm theo lời khuyên của bạn. Tôi có một bảng vùng lân cận và tôi đã sử dụng nó để tạo một LEFT JOIN. Cảm ơn bạn. Tất cả tốt nhất. -Laxmidi – Laxmidi

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

Điều gì sẽ xảy ra nếu có nhiều hàng khớp với điều kiện trong mệnh đề 'WHERE'? Trong trường hợp đó, có vẻ như OP muốn tất cả các hàng trả về thay vì tổng hợp. – Asaph

+0

Đánh dấu, Cảm ơn bạn đã bình luận. -Laxmidi – Laxmidi

0

Bạn có thể thêm COUNT(*) vào phần chọn, cung cấp cho bạn số lượng hàng trong tập hợp kết quả. Miễn là bạn chỉ muốn đọc một hàng, nó sẽ cung cấp cho bạn hoặc .

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

Nhưng nếu bạn nhận được nhiều hơn một hàng, nó có thể thất bại khi bạn chỉ nhận được một hàng từ tập hợp kết quả.

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

(Và đừng quên sử dụng một bí danh cho cột COUNT(*))

+0

Hi Progman, Cảm ơn bạn đã có ý tưởng. Tôi có thể sử dụng câu lệnh if với số CHỌN COUNT (*) AS myCount TỪ 'myTable' WHERE neighborhoods = 'Old Town' làm điều kiện trong chức năng của tôi. Điều này sẽ trả về 0, đó là những gì tôi muốn. Nhưng, làm cách nào để đặt giá trị của khu phố là "Phố cổ" và giá trị của sự cố là 0? Tôi không nghĩ rằng tôi muốn sử dụng SET và UPDATE. Bất kỳ đề xuất? Cảm ơn bạn! -Laxmidi – Laxmidi

0

Nếu bạn cần phải trả lại 0 từ DB tôi đề nghị sử dụng một hàm.

Nếu không, bạn có thể kiểm tra sự tồn tại từ mã bằng cách sử dụng truy vấn COUNT() trước khi thực hiện truy vấn thực tế.

+0

mcabral, Cảm ơn bạn đã đề xuất. -Laxmidi – Laxmidi

Các vấn đề liên quan