2009-05-19 25 views
8

Tôi có một cái gì đó truy vấn như thế này:Mysql ORDER BY sử dụng dữ liệu ngày hàng

SELECT 
title, desc, date 
FROM 
tablename 
ORDER BY 
date ASC, title ASC; 

trình tốt khi các dữ liệu thực sự có một ngày. Vấn đề là, ngày gửi là tùy chọn, vì vậy đôi khi tôi nhận được 0000-00-00 là ngày có hiệu ứng không may khi đặt tất cả các hàng không được đặt ở trên cùng.

Vì vậy, tôi sau đó cố gắng này:

SELECT 
title, desc, date 
FROM 
tablename 
ORDER BY 
date DESC, title ASC; 

Những loại công trình, nhưng không thực sự - tất cả các mục có số ngày (không 0000-00-00) được liệt kê theo thứ tự giảm dần, tiếp theo là tất cả các mục với 0000-00-00.

Điều tôi muốn làm là đặt hàng theo ngày ASC, tiêu đề ASC, nhưng chỉ khi ngày! = 0000-00-00, nhưng nếu ngày là = 0000-00-00, thì chỉ cần ORDER BY tiêu đề ASC trên (Tôi nghĩ rằng tôi đã giải thích chính xác). Cách duy nhất tôi có thể nghĩ để làm điều này là không dựa trên SQL (hoặc 2 truy vấn, hoặc, mỗi truy vấn chỉ điền một mảng trong bộ nhớ, và sau đó tôi sắp xếp bằng cách sử dụng PHP).

Có truy vấn SQL nào có thể thực hiện việc này không?

+2

MySQL có không hỗ trợ ngày NULL không? –

Trả lời

4

Giải pháp truy vấn 2 là giải pháp tốt nhất, bạn có thể thực hiện tất cả trong SQL bằng cách sử dụng lệnh UNION.

Truy vấn đầu tiên sẽ là ngày không khác, sau đó UNION trong truy vấn cho các ngày bằng 0.

Edit: Một cái gì đó như:

SELECT * FROM tbl 
    WHERE DATE != '0000-00-00' 
    ORDER BY date ASC 
UNION SELECT * FROM tbl 
    WHERE DATE = '0000-00-00' 
    ORDER BY title ASC 

này có thể không thể rất hữu ích trong trường hợp này, nhưng đối với các truy vấn phức tạp, UNION có thể có ích.

+0

Điều này làm việc khi tôi đặt dấu ngoặc đơn quanh các khối chọn như sau: (SELECT * FROM tbl WHERE DATE! = '0000-00-00' ORDER BY date ASC) UNION (SELECT * FROM tbl WHERE DATE = '0000 -00-00 ' ĐẶT HÀNG THEO tiêu đề ASC) – OneNerd

+0

Rất tiếc, bạn nói đúng, UNION về mặt kỹ thuật thực hiện mọi thứ mà không có trật tự quan trọng, nhưng dấu ngoặc đơn ngăn chặn điều này, tôi tin vào tham chiếu nó nói điều này. – Kekoa

9
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC 
Các vấn đề liên quan