मैं MySQL में पूरे परिणाम सेट को कैसे जोड़ूं?

मैं निम्नलिखित क्वेरी का प्रयास कर रहा हूं:

SELECT A,B,C FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query%'
GROUP BY B ORDER BY B ASC LIMIT 5

यह तीन प्रश्न एक साथ अटक गए हैं, थोड़े क्रमबद्ध हैं। हालांकि, परिणाम जो सेट आता है, क्वेरी # 1 के परिणामों से पहले क्वेरी # 3 के परिणामों को दर्शाता है जो अवांछित है।

क्या इन्हें प्राथमिकता देने का कोई तरीका है ताकि परिणाम क्वेरी # 1 के लिए आ सकें, फिर क्वेरी # 2 के लिए सभी प्रश्न # 3 के लिए? मैं अभी तक PHP में ऐसा नहीं करना चाहता हूं (उदाहरण के लिए नियंत्रण नहीं करना चाहिए जो पहले प्रश्न में दिखाया गया है कि दूसरे में और आगे नहीं दिखाना चाहिए)।

0
ro fr bn

6 उत्तर

क्या आप इसे उप-चयन के रूप में कर सकते हैं, कुछ ऐसा

select * from (
    SELECT A,B,C FROM table WHERE field LIKE 'query%'
    UNION
    SELECT A,B,C FROM table WHERE field LIKE '%query'
    UNION
    SELECT A,B,C FROM table WHERE field LIKE '%query%'
) ORDER BY B ASC LIMIT 5
0
जोड़ा

हार्ड-कोड किए गए मानों के साथ एक अतिरिक्त कॉलम जोड़ें जिसका उपयोग आप समग्र परिणाम को सॉर्ट करने के लिए करेंगे, जैसे:

SELECT A,B,C,1 as [order] FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C,2 as [order] FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C,3 as [order] FROM table WHERE field LIKE '%query%'
GROUP BY B ORDER BY [order] ASC, B ASC LIMIT 5
0
जोड़ा

हो सकता है कि आपको एक चौथा कॉलम शामिल करने का प्रयास करना चाहिए, जिसमें से तालिका आती है, और उसके बाद ऑर्डर करें और समूह करें:

SELECT A,B,C, "query 1" as origin FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C, "query 2" as origin FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C, "query 3" as origin FROM table WHERE field LIKE '%query%'
GROUP BY origin, B ORDER BY origin, B ASC LIMIT 5
0
जोड़ा

यदि ऐसा कोई तरीका नहीं है जो उन्हें आदेश देने के लिए समझ में आता है, तो परिणामों को एक साथ न करें - केवल 3 अलग-अलग रिकॉर्डसेट लौटाएं, और उनके डेटा स्तर के अनुसार उनके साथ सौदा करें।

0
जोड़ा

अंत में (सभी सुझावों को देखकर) इस समाधान में आया, यह मुझे जो चाहिए और समय के बीच एक समझौता है।

SELECT * FROM 
  (SELECT A, B, C, "1" FROM table WHERE B LIKE 'query%' LIMIT 3
   UNION
   SELECT A, B, C, "2" FROM table WHERE B LIKE '%query%' LIMIT 5)
AS RS
GROUP BY B
ORDER BY 1 DESC

यह चौथे "कॉलम" से कुल 5 परिणाम प्रदान करता है और मुझे जो चाहिए वह देता है; एक प्राकृतिक परिणाम सेट (यह AJAX पर आ रहा है), और एक वाइल्डकार्ड परिणाम सही बाद में सेट किया गया है।

:)

/एमपी

0
जोड़ा

अलग ए, बी, सी से चुनें (         तालिका से ओ के रूप में ए, बी, सी, 1 चुनें जहां फ़ील्ड 'क्वेरी%'         यूनिअन         तालिका से ओ के रूप में ए, बी, सी, 2 चुनें जहां फ़ील्ड '% query'         यूनिअन         तालिका से ओ के रूप में ए, बी, सी, 3 चुनें जहां फ़ील्ड '% query%'     )     ओएससी लिमिटेड द्वारा ऑर्डर 5

ऐसा करने का मेरा तरीका होगा। मैं नहीं जानता कि कैसे तराजू।

मुझे समझ में नहीं आता

GROUP BY B ORDER BY B ASC LIMIT 5

क्या यह केवल संघ में अंतिम चयन पर लागू होता है?

क्या MySQL वास्तव में आपको कॉलम द्वारा समूहित करने की अनुमति देता है और फिर भी अन्य कॉलम पर समेकित नहीं करता है?

संपादित करें: aaahh। मैं देखता हूं कि MySQL वास्तव में करता है। यह DISTINCT (बी) या कुछ का एक विशेष संस्करण है। मैं उस क्षेत्र में एक विशेषज्ञ बनने की कोशिश नहीं करना चाहता :)

0
जोड़ा