2009-05-19 17 views
8

का उपयोग करके मैं इस तरह एक प्रश्न कुछ है। समस्या यह है कि, तारीख सबमिशन वैकल्पिक है, इसलिए मुझे कभी-कभी 0000-00-00 एक तिथि के रूप में मिलता है, जिसमें शीर्ष पर सभी नंदे वाली पंक्तियों को रखने का दुर्भाग्यपूर्ण प्रभाव पड़ता है। दिनांक (गैर 0000-00-00) अवरोही क्रम में सूचीबद्ध हो के साथ सभी आइटम, सभी आइटम के बाद -Mysql आदेश दिनांक डेटा पंक्ति

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

कौन सा काम करता है की तरह है, लेकिन वास्तव में नहीं:

तो, मैं तो यह करने की कोशिश की 0000-00-00 के साथ।

मैं जो करना चाहता हूं वह एएससी, शीर्षक एएससी द्वारा आदेश है, लेकिन केवल तारीख! = 0000-00-00, लेकिन अगर तिथि = 0000-00-00 है, तो उन पर शीर्षक एएससी द्वारा ऑर्डर करें (मुझे लगता है कि मैंने सही ढंग से समझाया)।

ऐसा करने के लिए मैं सोच सकता हूं कि एकमात्र तरीके गैर-एसक्यूएल आधारित हैं (या तो 2 प्रश्न, या, प्रत्येक क्वेरी सिर्फ इन-मेमोरी सरणी को पॉप्युलेट करती है, और फिर मैं PHP का उपयोग करके सॉर्ट करता हूं)।

क्या कोई SQL क्वेरी है जो यह कर सकती है?

+2

क्या MySQL पूर्ण तिथियों का समर्थन नहीं करता है? –

उत्तर

4

आपका 2 क्वेरी समाधान, एक अच्छा एक है कि आप UNION आदेश का उपयोग एसक्यूएल में यह सब कर सकते हैं।

पहली क्वेरी उन तिथियों के लिए होगी जो शून्य नहीं हैं, फिर शून्य के लिए क्वेरी में यूनियन।

संपादित करें: कुछ की तरह:

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 

यह इस उदाहरण में बहुत उपयोगी नहीं हो सकता है, लेकिन जटिल प्रश्नों के लिए, UNION काम में आ सकता है।

+0

यह काम किया जब मैं इस तरह का चयन ब्लॉक के आसपास कोष्ठक रखा: (! Tbl से चुनें * जहां तिथि = '0000-00-00' द्वारा तारीख एएससी आदेश) यूनिअन (tbl से चुनें * जहां तिथि = '0000 -00-00 ' शीर्षक एएससी द्वारा आदेश) – OneNerd

+0

ओह, आप सही हैं, यूनियन तकनीकी रूप से बिना किसी मामले के चीजें करता है, लेकिन ब्रांडेसिस इसे रोकता है, मैं संदर्भ में विश्वास करता हूं कि यह कहता है। – Kekoa

9
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC 
संबंधित मुद्दे