2010-08-03 7 views
5

मेरे पास मेरी परियोजना में एक स्थिति है जो निम्नानुसार है।किसी होटल के कमरे के आरक्षण के लिए दिनांक सीमा चुनने के लिए mysql क्वेरी के लिए अद्यतन की आवश्यकता है या

जबकि

$sel_from_bookings="SELECT room_no FROM `booking` WHERE (('".$_POST['req_tdate']."' BETWEEN check_indate AND check_outdate) OR ('".$_POST['req_fdate']."' BETWEEN check_indate AND check_outdate)"; 

$sel_from_reserv="SELECT room_no FROM `reservation` WHERE (('".$_POST['req_tdate']."' BETWEEN check_indate AND check_outdate) OR ('".$_POST['req_fdate']."' BETWEEN check_indate AND check_outdate))"; 

$sel_rooms="SELECT room_no FROM rooms WHERE room_no NOT IN (".$sel_from_bookings.") AND room_no NOT IN (".$sel_from_reserv.")"; 

पहली क्वेरी बुकिंग तालिका जो तिथि सीमा

इसी तरह दूसरा एक डॉस तालिका आरक्षण से ही संतुष्ट से कक्ष संख्या की सूची retrives उपलब्ध कमरे के लिए जाँच

अंतिम क्वेरी उपरोक्त दो प्रश्नों द्वारा प्रदान की गई सूची का उपयोग करती है और उस कमरे की सूची प्राप्त करती है जो जेनरेट की गई सूची में नहीं है।

के लिए 10-08-2010/15-08-2010

ठीक काम करता है के लिए 20-08-2010/25-08-2010

ठीक काम करता है जब मैं 10 और यह 15 के बीच तारीखों देना 20 और 25 के लिए इसी तरह ठीक काम करता है और यह भी दिनांक 14-08-2010 और 21-08-2010

लेकिन 16-08-2010 19-08-2010

के लिए किसी भी आवश्यकता के लिए काम नहीं कर के लिए ठीक काम करता है स्पष्टीकरण कृपया मुझसे पूछो।

धन्यवाद।

+3

किसी भी प्रश्न में इसे बिना स्वीकृत किए $ $_P_PST का उपयोग न करें, इससे आपकी साइट एसक्यूएल इंजेक्शन के लिए कमजोर हो जाती है (आप अपना सभी डेटा खो सकते हैं)। – greg0ire

+0

@ greg0ire धन्यवाद मैं इसे ध्यान में रखूंगा। क्या आपको मेरा सवाल मिला? या किसी स्पष्टीकरण की आवश्यकता है? धन्यवाद। – srinivas

+0

"काम नहीं कर रहा" मतलब क्या है? क्या तुम्हें कोई त्रुटि का संदेश मिला है? क्या आप MySQL त्रुटियों को संभालने वाले हैं? – greg0ire

उत्तर

1
SELECT * 
FROM room 
WHERE room_no NOT IN 
     (
     SELECT room_no 
     FROM booking 
     WHERE check_outdate >= @req_fdate 
       AND check_indate <= @red_tdate 
     ) 
     AND room_no NOT IN 
     (
     SELECT room_no 
     FROM reservation 
     WHERE check_outdate >= @req_fdate 
       AND check_indate <= @red_tdate 
     ) 

वेतन ध्यान दे सकता है: @req_fdate यहाँ यहाँ पहली तारीख (से है), @req_tdate अंतिम तिथि है ( तक)।

Aug 16 से Aug 19 को उपलब्धता के लिए जाँच करने के लिए, इस का उपयोग करें:

SELECT * 
FROM room 
WHERE room_no NOT IN 
     (
     SELECT room_no 
     FROM booking 
     WHERE check_outdate >= '2010-08-16' 
       AND check_indate <= '2010-08-19' 
     ) 
     AND room_no NOT IN 
     (
     SELECT room_no 
     FROM reservation 
     WHERE check_outdate >= '2010-08-16' 
       AND check_indate <= '2010-08-19' 
     ) 
0

क्या डेटाटाइप फ़ील्ड चेक_इंडेट और check_outdate है?

मेरा अनुमान है कि BETWEEN कीवर्ड अपेक्षा के अनुरूप काम नहीं कर रहा है। यदि आप a >= b and a <= c के साथ प्रतिस्थापित करते हैं तो चीजें अलग-अलग काम करती हैं?

$sel_from_bookings="SELECT room_no FROM `booking` WHERE (('".$_POST['req_tdate']."' >= check_indate AND '".$_POST['req_tdate']."' <= check_outdate) OR ('".$_POST['req_fdate']."' >= check_indate AND '".$_POST['req_fdate']."' <= check_outdate)"; 

$sel_from_reserv="SELECT room_no FROM `reservation` WHERE (('".$_POST['req_tdate']."' >= check_indate AND '".$_POST['req_tdate']."' <= check_outdate) OR ('".$_POST['req_fdate']."' >= check_indate AND '".$_POST['req_fdate']."' <= check_outdate))"; 

$sel_rooms="SELECT room_no FROM rooms WHERE room_no NOT IN (".$sel_from_bookings.") AND room_no NOT IN (".$sel_from_reserv.")"; 

पुनश्च: आप भी अपने तारीख स्तंभों की डेटाप्रकार करने के लिए अपने उदाहरण कास्टिंग द्वारा डिबग करने के लिए कोशिश कर सकते हैं। अगर हम यह मान अपने check_indate स्तंभ प्रकार datetime की है, यदि आप कोशिश देखो क्या mysql वापस देता है यह:

SELECT CAST('16-08-2010' as datetime); 

बनाम

SELECT CAST('20-08-2010' as datetime); 

यहाँ मेरे mysql दोनों उदाहरणों पर विफल रहता है के बाद से यह yyyy-mm उम्मीद -dd तिथि प्रारूप की तरह है, लेकिन यह आप एक संकेत :) आदेश या तर्कों को

0

मैं डेटा फ़ील्ड के प्रकार आप check_outdate और check_indate के लिए प्रयोग कर रहे हैं पर विचार करेंगे।

यदि आप 'DATE' का उपयोग कर रहे हैं, तो सुनिश्चित करें कि इनपुट YYYY-MM-DD प्रारूप में है। यदि आप विभाजक के बिना कुछ और इनपुट करते हैं, तो MySQL दूसरी तारीख को अनुमान लगाएगा।यदि आप एक VARCHAR या निश्चित लंबाई CHAR, तो स्ट्रिंग तुलना उपयोग कर रहे हैं

$date ='12-12-2007'; 
$dateTime = new DateTime($date); 
$formatted_date=date_format ($dateTime, 'Y-m-d'); 
echo $formatted_date; 
// This will output 2007-12-12 

: आप सही दिनांक MySQL द्वारा की उम्मीद करने के लिए डीडी-MM-YYYY (या जो भी) से दिनांक स्वरूप परिवर्तित करने के लिए PHP समारोह का उपयोग कर सकते उम्मीद के रूप में नहीं हो सकता है।

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