2015-04-17 2 views
7

मैं पंक्तियों का चयन करने की कोशिश कर रहा हूं यदि दी गई तारीख केवल तालिका में दो तिथियों के बीच होती है पाठ्यचर्या तालिका में मैंने स्टार्टडेट और एंडडेट किया है।यदि दी गई तारीख दो तिथियों के बीच है तो पंक्तियों का चयन कैसे करें?

तो यह संभव है मैं भी जरूरत क्वेरी

$coursneededdate >= startdate AND $coursneededdate <= enddate 

यहाँ मेरी कोड है अंदर हालत करने के लिए, किसी भी मदद अत्यधिक सराहना की जाएगी।

$coursneededdate = '2020-08-27'; 
$sql = "SELECT * FROM curriculum where ".$coursneededdate." between 'startdate' and 'enddate'"; 
$result = $mysqli->query($sql); 
if ($result->num_rows > 0) { 


    while($row = $result->fetch_assoc()) { 

echo $row["curriculum_id"]; 


    } 
} 
+3

क्या त्रुटि मिल रहा है की कोशिश? – tharif

+0

वैरिएबल को उद्धरण दें, साथ ही यह डीबी पर जाने पर भी एक स्ट्रिंग है। 'चुनें * पाठ्यक्रम से ''। $ Coursneededdate। '' 'स्टार्टडेट' और 'एंडडेट' के बीच 'यदि यह अभी भी परिणाम नहीं देता है तो क्या तारीखों की जांच करें कि आपके पास कक्षा 5 साल आगे है? – chris85

+0

आपका प्रश्न बहुत स्पष्ट नहीं है। अगर मैं गलत हूं, तो मुझे सही करें, "आप किसी विशेष तारीख का डेटा केवल तभी प्राप्त करना चाहते हैं जब यह स्टार्टडाटा और एंडडेट के बीच आता है" –

उत्तर

3

समस्या यह है कि आप चर को उद्धृत नहीं कर रहे हैं जो आपके डीबी पर जाने पर एक स्ट्रिंग है। कॉलम नामों को उद्धृत न करें।

$coursneededdate = '2020-08-27'; 
$sql = "SELECT * FROM curriculum where '".$coursneededdate."' between startdate and enddate"; 
$result = $mysqli->query($sql); 
if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     echo $row["curriculum_id"]; 
    } 
} 

यह भी मुद्दा हो सकता है कि आप भविष्य में 5 साल की तारीख की जांच कर रहे हैं। क्या आपके पास डेटा बहुत आगे है?

+0

यह धन्यवाद काम करता है, लेकिन मुझे इन तिथियों के बीच मौजूद सभी डेटा लाने के लिए सभी प्रारंभ और समाप्ति तिथि की जांच करनी है।अब यह केवल एक पंक्ति लाता है? –

+0

मुझे इस मुद्दे के बारे में निश्चित नहीं है कि यह उन तारीख सीमाओं के बीच सभी रिकॉर्ड लौटाना चाहिए। यदि आप इसे डीबी पर चलाते हैं तो एक से अधिक लौटाए जाते हैं? हो सकता है कि 'अगर ($ परिणाम-> num_rows> 0) {' – chris85

+0

बहुत धन्यवाद, मैंने यह बुरा काम किया है, मैंने एक तारीख डाली है जो केवल एक पंक्ति की शुरुआत और समाप्ति तिथि के बीच है। क्या मैं इसे $ coursneededdate> = startdate और $ coursneededdate <= enddate –

0

सबसे पहले आपको एसक्यूएल शूट करने में परेशानी होनी चाहिए और सुनिश्चित करें कि आपके पास "कोडित" क्या है, जो एसक्यूएल में अपेक्षित है।

मैं यह देखने के लिए echo $sql; पर सुझाव दूंगा कि क्वेरी mysql से संबंधित है या फिर इसे डीबी में चलाएं।

हैं कि तब काम करता है मैं क्या कहा गया है chris85 करने के लिए सुझाव है कि अपने मूल्यों रैप करने के लिए है और एक भी बोली के अंदर $sql = "SELECT * FROM curriculum where '".$coursneededdate."' between 'startdate' and 'enddate'";

+0

क्या मैं $ coursneededdate> = startdate और $ coursneededdate <= enddate –

+1

जैसे क्वेरी में शर्त लगा सकता हूं जो आपके लिए क्या करता है। लेकिन हां। अपने परिवर्तनीय एकल उद्धरण को मत भूलना और कॉलम नाम पहले वैरिएबल नहीं आता है। @ हुसैन आल्मल्की – azngunit81

6

आपका SQL विवरण SELECT * FROM curriculum where '2020-08-27' between 'startdate' and 'enddate' जो सभी स्ट्रिंग मूल्यों और कोई दिनांक होते हैं करने के लिए मूल्यांकन करता है।

आपूर्ति पैरामीटर एक स्ट्रिंग के रूप में शुरू होता है, इसलिए आपको इसे STR_TO_DATE का उपयोग करके दिनांक मूल्य में परिवर्तित करने की आवश्यकता होगी। तालिका से कॉलम नाम उद्धरण में नहीं होना चाहिए। आप कभी-कभी कॉलम नाम निर्दिष्ट करने के लिए उपयोग किए गए बैक कोट को देखेंगे।

आपकी क्वेरी

SELECT * FROM curriculum WHERE STR_TO_DATE('2020-08-27','%Y-%m-%d') BETWEEN `startdate` AND `enddate`; 

महत्वपूर्ण नोट

की तरह कुछ होना चाहिए आपूर्ति की स्ट्रिंग दिनांक मानों उपयोगकर्ता इनपुट उत्पन्न से बनाने स्ट्रिंग संयोजन के साथ एक SQL क्वेरी कोड SQL Injection की चपेट में बना देता है, आता है ।

+1

अच्छा उत्तर लेकिन प्रारूप 'STR_TO_DATE' की आवश्यकता नहीं है यदि प्रारूप मानक mysql दिनांक प्रारूप है, जो यह स्पष्ट रूप से है। अभी भी 1 ऊपर प्राप्त करें :) –

+0

धन्यवाद श्रीमान, क्या मैं इस शर्त को $ coursneededdate> = startdate और $ coursneededdate <= enddate –

+1

@ हुसैन आल्मल्की हां कर सकता हूं, लेकिन यह है कि बीटवेन स्टेटमेंट आपके लिए पहले से ही https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between –

0

इस

$sql = "SELECT * FROM curriculum where date = '" . $coursneededdate . "' AND date between '".$startdate."' and '" . $enddate . "'"; 
संबंधित मुद्दे