2012-09-26 12 views
8

मैं एक ही कॉलम में एकाधिक मानों का चयन करने की कोशिश कर रहा हूं।मैं एक ही कॉलम में एकाधिक मानों का चयन कैसे करूं?

SELECT `salesorder` 
    ,`masterproduct` 
    ,`family` 
    ,`birthstamp` 
    ,`duedate` 
    ,COUNT(*) AS `total` 
FROM `report` 
WHERE `birthstamp` BETWEEN '$startDT' 
     AND '$endDT' 
    AND `family` = 'Software_1Y' 
    AND `family = 'XI_1Y' 
    AND `family` = 'PI_1Y' 
GROUP BY `salesorder` 
    ,`masterproduct` 
    ,`family` 
    ,`duedate`; 

मेरे क्वेरी कोई भी पंक्ति रिटर्न लेकिन मैं एक एक करके प्रत्येक परिवार के एक खोज है: मूल रूप से मैं क्वेरी मूल्यों Software_1Y, XI_1Y और P1_1Y

मैं इस क्वेरी चला रहा हूँ के साथ स्तंभ family के तहत उन सभी का चयन करना चाहते मेरे पास मूल्य हैं।

मेरी क्वेरी के साथ क्या गलत है?

इसके अलावा, मेरा उद्देश्य सभी पंक्तियों जिसका family मान हैं Software_1Y, XI_1Y और PI_1Y प्राप्त करने के लिए है।

+0

'IN' का उपयोग करें या' \ 'परिवार \' = 'Software_1Y' या \ 'परिवार \' = 'XI_1Y' या \ 'परिवार \' = 'PI_1Y'' – hjpotter92

+0

' अगर मैं गलत हूं तो मुझे सही करें लेकिन अगर मैं 'OR' का उपयोग करता हूं तो मुझे केवल एक पंक्ति मिलती है? मेरा उद्देश्य उन सभी पंक्तियों को उन 'परिवार' मूल्यों के साथ प्राप्त करना है। – Jude

उत्तर

10

बजाय

SELECT `salesorder`, 
     `masterproduct`, 
     `family`, 
     `birthstamp`, 
     `duedate`, 
     COUNT(*) AS `total` 
FROM `report` 
WHERE `birthstamp` BETWEEN '$startDT' AND '$endDT' 
AND  `family` IN ('Software_1Y','XI_1Y','PI_1Y') 
GROUP BY `salesorder`, 
      `masterproduct`, 
      `family`, 
      `duedate`; 

कारण है कि कोई भी मान लौटा दिया जाता है में उपयोग के बारे में कैसे, इस खंड की वजह से है

AND `family` = 'Software_1Y' 
AND `family = 'XI_1Y' 
AND `family` = 'PI_1Y' 

family ही बार में सभी 3 मूल्यों नहीं किया जा सकता है, लेकिन यह 1 हो सकता है 3 मूल्यों में से।

यही कारण है कि आप IN का उपयोग करेंगे।

इसे देखने का एक और तरीका OR का उपयोग करना होगा, लेकिन यह वास्तव में लंबे समय तक हवादार हो जाता है।

+2

इसका मतलब है कि आपके एसक्यूएल में कोई त्रुटि हुई है। क्या आप 'mysql_query' से कोई त्रुटि नहीं देखते हैं? त्रुटि संदेश आपको बताएगा कि आपकी गलती कहां थी। – Barmar

+0

धन्यवाद @ बामार, मेरी गलती, एक गूंगा देखा। क्षमा करें: डी हाहा ... – Jude

+0

यह इस प्रकार के प्रश्नों पर अब तक का सबसे अच्छा स्पष्टीकरण है। धन्यवाद एस्टर –

1
$query=" SELECT `salesorder`,`masterproduct`,`family`,`birthstamp`,`duedate`, COUNT(*) AS `total` FROM `report` 
    WHERE `birthstamp` BETWEEN '$startDT' AND '$endDT' 
      AND (`family` = 'Software_1Y' 
      OR `family` = 'XI_1Y' 
      OR `family` = 'PI_1Y') 
    GROUP BY `salesorder`,`masterproduct`,`family`,`duedate` "; 

यह परिवार कॉलम से पूछताछ के दौरान या इसके बजाय होना चाहिए।

$result = mysql_query($query); 
while ($row = mysql_fetch_array($result)) 
{ 
//Operation you want to perform 
} 

@jude: यह आप सीधे क्वेरी सीधे प्रकार स्ट्रिंग की है जो mysql_fetch_array के लिए एक पैरामीटर है, जो गलत है के रूप में गुजर रहे हैं लगता है। इसके बजाय उपरोक्त दृष्टिकोण का पालन करें ...

+1

आप शायद ओआरएस के आसपास कुछ ब्रैकेट रखना चाहते हैं ... और ('family' = 'Software_1Y' या' family = 'XI_1Y' या 'family' = 'PI_1Y') –

+0

@astander: हाँ ... यह मेरे दिमाग में भी आया। लेकिन फिर मैंने सोचा कि क्या यह वास्तव में इस विशेष मामले में स्थिति को प्रभावित करेगा? –

+0

वाईई, यह निश्चित रूप से होगा, क्योंकि आपके पास ऑपरेटर का ऑर्डर होगा ('$ startDT' और '$ endDT' और 'family' =' Software_1Y ') या 'family' =' XI_1Y 'या' family' = 'PI_1Y' –

संबंधित मुद्दे